C#خصائص تلقائية




c#-3.0 automatic-properties (8)

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

في الحالة الأولى ، سيضيف المحول البرمجي تلقائيًا حقلاً لك ، وسيقوم بتغليفه. إنه في الأساس معادل لعمل ما يلي:

private string forename;
public string Forename
{
    get
    { 
        return this.forename;
    }
    set
    {
        this.forename = value;
    }
}

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

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

أنا مرتبك قليلاً على نقطة الخصائص التلقائية في C # على سبيل المثال

public string Forename{ get; set; }

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

public string Forename; 

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


أعضاء البيانات العامة شر (في أن الكائن لا يتحكم في تعديل حالته الخاصة - يصبح متغيرًا عالميًا). فواصل التغليف - عقيدة من OOP.

هناك خصائص تلقائية لتوفير التغليف وتجنب الكدح لكتابة رمز لوحة المرجل لخصائص بسيطة.

public string ID { get; set;}

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

string m_ID;
public string ID
{
   get { return m_ID; }
   set 
   { 
     //validate value conforms to a certain pattern via a regex match
     m_ID = value;
   }
}

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



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

تحتاج إلى الخصائص في C #

Poperties في C # ، للقراءة فقط ، والكتابة فقط ، القراءة / الكتابة ، التنفيذ التلقائي


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


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

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


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


يمكنك كتابة

public string Forename{ get; private set; }

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





automatic-properties