الاختلافات بين الحقول الخاصة والممتلكات الخاصة

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

  •  03-07-2019
  •  | 
  •  

سؤال

ما هو الفرق بين استخدام خصائص الخاصة بدلا من الحقول الخاصة

private String MyValue { get; set; }

// instead of

private String _myValue;

public void DoSomething()
{
   MyValue = "Test";

   // Instead of

   _myValue = "Test";
}

هل هناك أي مشكلة الأداء؟ أو مجرد اصطلاح التسمية؟

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

المحلول

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

نصائح أخرى

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

class Person { 
  private DateTime _birthday;
  private int _age { get { return (DateTime.Now - _birthday).TotalYears; }
}

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

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

وأخرى ثم ما سبق أن أجاب، والأداء، وsymantics completness هناك قضية واحدة صالحة لقد رأيت لالممتلكات الخاصة بدلا من حقل خاص:

public class Item
{
    private Item _parent;
    private List<Item> _children;

    public void Add(Item child)
    {
        if (child._parent != null)
        {
            throw new Exception("Child already has a parent");
        }
        _children.Add(child);
        child._parent=this;
    }
}

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

ولحل هذه يمكنك ان تجعل هذه الممتلكات، وإجراء فحص للحصول على مراجع دائرية.

سوف

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

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

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

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

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