ما الذي يجب عليه تحديد المتغيرات الخاصة على أنه خاص إذا كانت بالفعل؟

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

  •  23-08-2019
  •  | 
  •  

سؤال

بقدر ما أعرف، في C #، جميع الحقول خاصة مقابل الافتراضي، إن لم تكن علامة خلاف ذلك.

class Foo
{
  private string bar;
}

class Foo
{
  string bar;
}

أعتقد أن هذين التصريحين متساوين.

لذلك سؤالي هو: ما يجب علي تحديد المتغيرات الخاصة كما private إذا كانوا بالفعل خاصة؟

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

المحلول

لقد كنت على السياج لفترة من الوقت حول هذا الموضوع. اعتدت أن أجادل على تركها ضمنية، ولكن الآن أعتقد أنني أفسدت نحو جعلها صريحة.

أسباب تركها ضمنية:

  • وهذا يعني أن هناك اختلاف أكبر للأعضاء غير القطاعين الخاصين (أو أي شيء بمزيد من الوصول من الافتراضي)؛ هذا يسلط الضوء على الفرق عند قراءة التعليمات البرمجية

أسباب جعلها صريحة:

  • قد لا يعرف بعض المطورين الإعدادات الافتراضية: مما يجعله واضحا يعني أنه واضح كل واحد
  • يظهر أنك اتخذت بنشاط قرارا، بدلا من تركها فقط إلى الافتراضي

هذه النقاط الأخيرة هي أساسا تلك التي أدلى بها إريك ليبيرت عندما ناقشنا ذلك منذ فترة.

نصائح أخرى

حاليا؛ يجب أن تكون الحقول دائما خاصة دائما على أي حال، لذلك فهي حالة حافة ما إذا كان يجب أن تهتم.

بالنسبة للموضوع الأوسع، أتذكر تعليقا من قبل Eric Lippert - قائلا أساسا أنه بالنظر إلى طريقة / فئة / أيا كان:

void Foo() {}
class Bar {}

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

نعم انهم متساوون ولكني أحب تحديد المتغيرات الخاصة نشر, أعتقد أنه يحسن القراءة.

كما يمكنني استخدام هذا الترميز المشترك للأعضاء الخاصين، فهو مفيد للغاية:

private string _bar;

هذا هو سؤال معايير الترميز بحتة ولكن، لما يستحق، فأنا دائما بصراحة أعضاء خاصة على أنها خاصة.

إذا كنت تبحث بين جافا و C # على أساس منتظم، أتصور أنه سيكون من المهم إلى حد ما تحديد سطور المعدل الوصول. على سبيل المثال في جافا

void myMethod()
{

}

أي فئة في الحزمة الخاصة بك لديها الوصول إلى هذه الطريقة. في C # من الواضح أنها خاصة إلى الطبقات الفئة والفئات الداخلية.

لا تجعل الناس يخمنون، فلا تدعهم في افتراضات خاطئة، ولا تفكر في عدد أقل من الأحرف بأي شكل من الأشكال بالوضوح.

ليس هناك سبب وجيه ليس لجعل هذا الصريح، و IMHO إنه خطأ ل C # لدعمه (خاصة إذا كانوا على استعداد للقيام بما فعلوه لتبديل البيانات لنفس السبب)

باستخدام خاص باستخدام خاص يمكن تحسين قابلية القراءة في حالات حافة معينة.

مثال:

        /*
        Tomorrow when we wake up from bed,
        first me and Daddy and Mommy, you, eat
        breakfast eat breakfast like we usually do,
        and then we're going to play and
        then soon as Daddy comes, Carl's going
        to come over, and then we're going to
        play a little while. And then Carl and
        Emily are both going down to the car
        with somebody, and we're going to ride
        to nursery school [whispered], and then
        when we get there, we're all going
        to get out of the car...
        */

        int spam;

        /*
        Does this style look at all familiar?
        It should!
        */

بالنظر إلى هذه الشظية قد تكون غير متأكد مما إذا كنت في طريقة أو نطاق الفصل.

باستخدام سما private أو الشرطة السفلية في اسم الحقل (private int spam;, int spam_; أو int _spam;) سوف القضاء على الارتباك.

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

أفكر في قابلية القراءة فمن الأفضل دائما أن أكون صريحا.

كجانب، قد ترغب في إلقاء نظرة على المكونات المكونة من Visual Studio إفراز رمز النمط (http://jole.fjorden.se/static.php؟page=codestyleenFors.) والتي تستخدم ملحقات DxCore لتوفير ملاحظات في الوقت الفعلي على الالتزام بالترميز وفقا لمعايير الترميز (قابلة للتخصيص بالكامل).

أنا شخصيا أفضل وضع علامة على الحقول العامة الافتراضية والإفتراضية بشكل صريح. قد تعرف بشكل جيد الإعدادات الافتراضية ولكن عقلك يشبه Vibosity كلما قمت بفحص التعليمات البرمجية بسرعة.

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