簡體   English   中英

關於最佳實踐的C#神話?

[英]C# myths about best practices?

我的同事一直告訴我評論中列出的內容。

我很迷惑。 有人可以為我揭開這些神秘面紗嗎?

class Bar
{
    private int _a;

    public int A
    {
        get { return _a; }
        set { _a = value; }
    }

    private Foo _objfoo;

    public Foo OFoo
    {
        get { return _objfoo; }
        set { _objfoo = value; }
    }

    public Bar(int a, Foo foo)
    {
        // this is a bad idea
        A = a;
        OFoo = foo;
    }

    // MYTHS
    private void Method()
    {
        this.A    //1 -
        this._a   //2 - use this when inside the class e.g. if(this._a == 2)
        A         //3 - use this outside the class e.g. barObj.A
        _a        //4 - 
                  // Not using this.xxx creates threading issues.
    }
}
class Foo
{
    // implementation
}

this. 如果沒有名稱沖突,則是多余的。 只有當您需要對當前對象的引用或者您有一個與字段同名的參數時,才需要它。

線程問題與它無關。 混淆可能來自這樣的事實:大多數靜態成員都是實現的,因此它們是線程安全的,靜態成員不能用this.來調用(!) this. 因為他們沒有綁定到實例。

“不使用this.xxx會產生線程問題”

是一個完整的神話。 只要問問你的同事,檢查產生IL,讓他解釋為什么他們不管添加相同this與否。

“在課堂內使用這個,例如if(this._a == 2)”

歸結為你想要達到的目標。 你的同事似乎在說什么總是參考私人領域,這在我看來並不合理。 通常你想訪問公共屬性,甚至是在類中,因為getter可能會修改值(例如,當列表為null時,List類型的屬性可能會返回一個新的List實例,以避免在訪問屬性時出現空引用異常)。

我個人的“最佳實踐”是始終使用它。 是的,它是多余的,但是當您考慮多線程應用程序時,從第一個外觀中識別實例的狀態被查找或檢索的很好的方法。

詢問您的同事為什么認為這些建議是最佳做法可能會有所幫助? 通常人們會引用最佳實踐“規則”,這些規則是他們在沒有真正了解實踐背后的原因的情況下獲得的。

正如Lucero所說,除非()存在名稱沖突,否則不需要“this”。 然而,有些人喜歡在沒有嚴格要求的情況下加入“this”,因為他們認為它提高了可讀性/更清楚地顯示了程序員的意圖。 在我看來,這是個人偏好而不是其他任何事情。

至於你的“Bar”方法中的“壞主意”:你的同事可能會因為以下原因而考慮這種不良做法:如果“A”的setter方法被改變為有一些副作用,那么A = a; 也會產生這種副作用,而_a = a; 將只設置私有變量。 在我看來,最佳實踐是了解差異而不是偏愛另一個。

最后,“線程問題”是無意義的 - AFAIK“this”與線程無關。

數字2是一個神話,通過提及自動屬性很容易被揭穿。 自動屬性允許您定義沒有由編譯器自動生成的后備字段的屬性。 所以問你的同事他對自動屬性的看法是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM