سؤال

ولدي فئة بسيطة باستخدام الخواص التي تنفذها السيارات:

Public Class foo
{
    public foo() { }  

    public string BarName {get; set;}
}

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

Public Class foo
{
    public foo() {}  

    private string _BarName = "";
    public string BarName 
    { 
        get {return _BarName;}
        set {_BarName = Value.ToString().ToUpper();}
    }
}

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

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

ويبدو أن هذا التجارة العادلة قبالة خطوط وخطوط رمز لخصائص برنامج الإعداد.

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

المحلول

<اقتباس فقرة>   

هل هذا يعني أنني بحاجة إلى الآن   إنشاء متغير الخاص لBarName

نعم

<اقتباس فقرة>   

ووتغيير BarName الحالي   متغير يستخدم في جميع أنحاء صفي

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

<اقتباس فقرة>   

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

والصحيح.

نصائح أخرى

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

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

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

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

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

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

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

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

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

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

وخصائص التلقائية هي السكر فقط النحوي، المترجم في الواقع يخلق عضو خاص لذلك، ولكن نظرا لأنه تم إنشاؤها في وقت الترجمة، لا يمكنك الوصول إليه.

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

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