c#-3.0 - C#خصائص تلقائية




automatic-properties (10)

من المفترض أنك تتوقع إضافة المنطق في وقت لاحق.

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

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

public string Forename{ get; set; }

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

public string Forename; 

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



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

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


إلقاء نظرة على التعليمة البرمجية التالية والشرح.
The most common implementation for a property is getter or a setter that simply reads and writes to a private field of the same type as a property. An automatic property declaration instructs the compiler to provide this implementation. The compiler automatically generates a private backing field.
انظر إلى الكود التالي:

    public class Stock 
    {
      decimal currentPrice ;  // private backing field.
      public decimal CurrentPrice 
      {
        get { return currentPrice ; }
        set { currentPrice = value ; }
      }
   }

يمكن إعادة كتابة نفس الرمز على النحو التالي: -

   public class Stock
   {
     public decimal CurrentPrice { get ; set ; } // The compiler will auto generate a backing field.
   }

المصدر: - C # في باختصار


يمكنك كتابة

public string Forename{ get; private set; }

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


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

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

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

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

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


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

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

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


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


أعضاء البيانات العامة شر (في أن الكائن لا يتحكم في تعديل حالته الخاصة - يصبح متغيرًا عالميًا). فواصل التغليف - عقيدة من 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;
   }
}

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






c# c#-3.0 automatic-properties