كم مرة ترى إساءة استخدام الحروف/المحددات المختصرة في C#؟

StackOverflow https://stackoverflow.com/questions/1073392

سؤال

في لغة C#، يمكنك إنشاء getter/setters بطريقة أبسط من اللغات الأخرى:

public int FooBar { get; set; }

يؤدي هذا إلى إنشاء متغير خاص داخلي لا يمكنك معالجته مباشرة، باستخدام الخاصية الخارجية "FooBar" للوصول إليه مباشرة.

سؤالي هو: كم مرة ترى هذا الإساءة؟يبدو أن لديها إمكانية عالية لانتهاك أفضل ممارسات التغليف في كثير من الأحيان.لا تفهموني بشكل خاطئ، فأنا أستخدمه حسب الاقتضاء، وأشكال جزئية منه لأنواع الخصائص للقراءة فقط والكتابة فقط، ولكن ما هي تجاربك غير السارة معها من مؤلفين آخرين في قاعدة التعليمات البرمجية الخاصة بك؟

إيضاح:إن التعريف المقصود لإساءة الاستخدام هو بالفعل إنشاء مثل هذه الخاصية عندما تكون المتغيرات الخاصة مناسبة.

هل كانت مفيدة؟

المحلول

لقد رأيته يساء استخدامه (في رأيي).على وجه الخصوص، عندما يقوم المطور بذلك عادة يكتب:

private readonly int foo;
public int Foo
{ 
    get 
    { 
        return foo;
    }
}

سيكتبون أحيانًا:

public int Foo { get; private set; }

نعم، انها أقصر.نعم، من خارج الفصل لها نفس المظهر - لكنني لا أعتبرها نفس الشيء، حيث يسمح النموذج الأخير بتعيين الخاصية في مكان آخر في نفس الفصل.وهذا يعني أيضًا أنه لا يوجد تحذير إذا لم يتم تعيين الخاصية في المنشئ، ولم يكن الحقل للقراءة فقط لـ CLR.هذه اختلافات طفيفة، لكن مجرد اللجوء إلى النموذج الثاني لأنه أبسط وتجاهل الاختلافات يبدو بمثابة إساءة لي، حتى لو كانت بسيطة.

ولحسن الحظ، أصبح هذا متاحًا الآن اعتبارًا من الإصدار C# 6:

// Foo can only be set in the constructor, which corresponds to a direct field set
public int Foo { get; }

نصائح أخرى

ليس هناك "إساءة استخدام" في عدم كتابة الحقل يدويًا؛ومن الجيد تشجيع الجميع على الوصول عبر العقار (وليس مباشرة إلى الميدان) على أي حال!

أكبر مشكلة أعرفها هي مع التسلسل الثنائي, ، حيث يكون من الصعب بعض الشيء العودة إلى الحقل العادي دون جعله غير متوافق مع الإصدار - ولكن بعد ذلك...استخدم مُسلسِلًا مختلفًا؛-p

سيكون من الرائع أن يكون هناك متغير "مناسب" للقراءة فقط، وإذا لم تكن بحاجة إلى استخدامه :this() ctor-chaining على الهياكل، ولكن ....مه!

ولم أرى أي إساءة فيه.ولكي أكون صادقًا، لا أفهم حقًا ما تقصده، لأنني لا أستطيع أن أرى كيف يمكن إساءة استخدام بناء الجملة هذا.

لا أعتقد أن الخصائص التلقائية أسوأ من الخصائص العادية فيما يتعلق بالتغليف.

إذا كنت تقصد أن بعض المطورين يستخدمون الخصائص التلقائية العامة بدلاً من الحقول الخاصة فهذا بالطبع خطأ ويعطل التغليف..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top