سؤال

عندما تكون داخل الطبقة لديك خاصة fiels وفضح هذا المجال على الممتلكات العامة ، التي يجب أن تستخدم من داخل الصف ؟

أدناه هو مثال على ما أحاول معرفة.يجب أن manioulate الحقل الخاص _Counter أو الممتلكات العداد ؟

فئة العمومي الاختبار

Private _Counter As Integer

Public Property Counter() As Integer
    Get
        Return _Counter
    End Get
    Set(ByVal value As Integer)
        _Counter = value
    End Set
End Property

Private Sub Dosomething()

    'What is the best practice?
    'Direct access to private field or property?

    'On SET
    _Counter += 1
    'OR
    Me.Counter += 1

    'On Get
    Console.WriteLine(_Counter)
    Console.WriteLine(Me.Counter)

End Sub

End Class

شكرا مقدما على المساعدة.Edu

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

المحلول

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

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

ملحوظة أيضا أن معظم بيئات التطوير الحديثة (مثل الكسوف) تسمح على الفور معرفة كل ما يشير إلى حقل الخاص، وريفاكتور رمز لاستخدام وظيفة بدلا من الوصول مباشرة.

نصائح أخرى

المنظمة البحرية الدولية يجب أن يكون باستخدام الملكية accessor كلما كان ذلك ممكنا.هذا هو أنك لا داعي للقلق حول أي المنطق الداخلي التي قد تكون متاحة عندما يكون لديك عقار.

مثال جيد حيث يحدث هذا في التعليمات البرمجية خلف في Linq DataContext.

تحقق من هذا...

[Column(Storage="_ReviewType", DbType="TinyInt NOT NULL")]
public byte ReviewType
{
    get
    {
        return this._ReviewType;
    }
    set
    {
        if ((this._ReviewType != value))
        {
            this.OnReviewTypeChanging(value);
            this.SendPropertyChanging();
            this._ReviewType = value;
            this.SendPropertyChanged("ReviewType");
            this.OnReviewTypeChanged();
        }
    }
}

لاحظ كل هذا المنطق في 'واضع'?

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

شكرا لكم جميعا على الردود و الاقتراحات.

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

أن قال ؛ حكم الشخصية هو يميل نحو هذا:

  1. الوصول إلى حقول خاصة مباشرة.

  2. إذا كان الوصول إلى accessors استخدام الكلمات الرئيسية لي.لتحسين إمكانية القراءة

  3. استخدام أسلوب استرجاع القيمة فقط إذا كان ينفذ الحيوية المنطق المنطق الذي ينطبق أيضا على الوصول إلى القطاع الخاص.بهذه الطريقة أنت تعرف أنه إذا كنت تستخدم أسلوب استرجاع قيمة لأن هناك "شيئا آخر على ذلك"

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

اسمحوا لي أن أعرف ما هو رأيك.

وي:

بعد هذا أعتقد أننا في عداد المفقودين نطاق جديد لفئة مستوى المجالات.كلمات مثل "المحظورة" أين هذا المجال يمكن الوصول إليها فقط من جالبة/واضع.بهذه الطريقة يمكنك دائما الوصول مباشرة حقول خاصة ، ولكن إذا كنت بحاجة إلى التأكد من بعض الميدانية يمكن الوصول إليها فقط من قبل accessor أن تغيير خاصة إلى تقييد.(ماذا عن "تقييد RestrictedRead و RestrictedWrite"?)

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

استخدم الحقل الخاص لأنك لا تفعل شيئا على وجه الخصوص في واضع.

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

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

أنا <م> دائما استخدام accessors الخاصية، لأن أنا آمن في حالة I إضافة منطق في جالبة أو اضعة في المستقبل، مع العلم يقينا أن أي رمز يتجاوز ذلك.

إذا كنت قلقا بشأن النفقات العامة الأداء الدعوة accessors الخاصية عندما اذهبوا مباشرة إلى الميدان، لا. ومعظم المجمعين مضمنة هذا النوع من الشيء، مما يتيح لك بشكل فعال نفس الأداء. على الأقل، كنت من غير المحتمل جدا أن تحتاج إلى نانو ثانية إضافية من الوقت الذي <م> قد الربح عن طريق الذهاب مباشرة إلى الميدان.

ومن الأفضل أن العصا مع accessors الخاصية لأ) يمكنك أن تكون متسقة للغاية في كل من التعليمات البرمجية الخاصة بك مما يجعله أكثر maintainble وب) تحصل أشارت فوائد بها الآخرون هنا.

وأيضا، وأنا عادة لا إضافة كلمات رئيسية وMe. (أو this.)، ما لم يكن هناك مشكلة النطاق (التي أحاول تجنب باختيار معرفات بلدي بعناية). أنا لا أحصل على الخلط بين هذا لأن بلدي وظائف والغواصات أبدا طويلة لدرجة أنني لست متأكدا ما إذا كنت أعمل مع (على كومة) متغير محلي أو عضوا في الطبقة. عندما تحصل وقتا طويلا لمعرفة بسهولة، I ريفاكتور.

الناشر الأصلي هو الصحيح تماما.

1) الوصول إلى حقول خاصة مباشرة.

  • يجعل إعادة بيع ديون أسهل.

2) إذا كان الوصول إلى accessors استخدام الكلمات الرئيسية لي.لتحسين إمكانية القراءة

  • صراحة قائمة نطاق يتطلب أقل التفكير قبل القارئ

3) استخدام أسلوب استرجاع القيمة فقط إذا كان ينفذ الحيوية المنطق المنطق الذي ينطبق أيضا على الوصول إلى القطاع الخاص.بهذه الطريقة أنت تعرف أنه إذا كنت تستخدم أسلوب استرجاع قيمة لأن هناك "شيئا آخر على ذلك"

  • هذا هو السبب الوحيد تنتهك القاعدة #1.

4) تجنب استخدام المحمية المجالات.الفئات المشتقة يجب دائما استخدام أسلوب استرجاع قيمة أبدا الوصول المباشر إلى الميدان.

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