سؤال

تكرار ممكن:
متى تستخدم الكلمة الرئيسية "هذا"؟

مرحبا ، أنا أفهم أن This يتم استخدام الكلمة الرئيسية للإشارة إلى مثيل للفصل ، ومع ذلك ، افترض أن لدي فئة تسمى Life, ، الذي يحدد حقلين ، الشخص (أسماؤهم) وشريكهم (أسماؤهم):

class Life
{
    //Fields
    private string _person;
    private string _partner;

    //Properties
    public string Person
    {
        get { return _person; }
        set { _person = value; }
    }

    public string Partner
    {
        get { return _partner; }
        set { _partner = value; }
    }

    //Constructor 1
    public Life()
    {
        _person = "Dave";
        _partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }

    //Constructor 2
    public Life()
    {
        this._person = "Dave";
        this._partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}

هل هناك فرق بين المنشئ 1 والمُنشئ 2!؟ أم أنها مجرد ممارسة ترميز أفضل لاستخدام الكلمة "هذه"؟

يعتبر

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

المحلول

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

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

نسختي من صفك:

class Life
{
    //Fields
    private string person;
    private string partner;

    //Properties
    public string Person
    {
        get { return this.person; }
        set { this.person = value; }
    }

    public string Partner
    {
        get { return this.partner; }
        set { this.partner = value; }
    }


    public Life()
    {
        this.person = "Dave";
        this.partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}

أو ، حتى أفضل ، ولكن ليس واضحًا بشأن استخدام this مع الحقول.

class Life
{

    //Properties
    public string Person { get; set; }
    public string Partner { get; set; }

    public Life()
    {
        this.Person = "Dave";
        this.Partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}

نصائح أخرى

يستخدم "هذا" أيضًا في .NET 3.5 مع طرق التمديد:

public static class MyExtensions
{    
    public static string Extend(this string text)
    {
       return text + " world";
    }
}

سوف يمد فئة السلسلة

var text = "Hello";
text.Extend();

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

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

class Impl : IFace
{

    public void DoStuff()
    {
        ((IFace)this).SomeMethod();
    }

    void IFace.SomeMethod()
    {
    }
}

لا يوجد فرق في البيانين ...

//These are exactly the same.

this._person 

//and 

_person 

الإشارة إلى "هذا" ضمني في حالة _person. لن أقول أنه بالضرورة ممارسة ترميز "أفضل" ، أود أن أقول إنها مجرد تفضيل.

نظرًا لأنك تستخدم السدود ، فلا يوجد تعارض بين الأسماء ؛ لذلك "this."زائدة عن الحاجة ويمكن حذفها. لن يتأثر IL.

طالما لا يوجد غموض بين الحقل والمتغير/parareter ، يوجد سيناريو واحد فقط فيه this الكلمة الرئيسية (في سياق المعنى المثيل الحالي - وليس CTOR) ضروري تمامًا - استدعاء طريقة تمديد محددة بشكل منفصل:

this.SomeExtensionMethod();  // works
SomeExtensionMethod();  // fails

يقوم كلا المنشئين بنفس الشيء على أي حال في الثانية this زائد

يمكنك استخدام هذا للتمييز بين متغير محلي يدعى X وحقل/خاصية مستوى الفصل بنفس الاسم.

يجب ألا تستخدم المتغيرات الخاصة _person و _parter. هذا هو الغرض من getters الخاص بك والمستقبين.

بقدر البنى ، لا يوجد فرق حقيقي بينهما. ومع ذلك ، أفضّل دائمًا استخدام هذه الكلمة الرئيسية لأنها تضفي على قابلية القراءة.

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