簡體   English   中英

C#屬性getter返回新對象的最佳做法是什么?

[英]Is it best practice for a C# property getter to return a new object?

我經常編寫在屬性getter中創建新對象的類,但我讀過這不一定是最佳實踐。 例如:

public class Board
{
    public float Width { get; }
    public float Height { get; }
    public CGSize Size { get { return new CGSize(this.Width, this.Height); } }

    public Board(float width, float height)
    {
        this.Width = width;
        this.Height = height;
    }
}

那有什么不對嗎?

看到這里: 在getter中創建對象是不是很糟糕? 各種受歡迎的人都認為這是不好的做法,例如:“是的,這是不好的做法。理想情況下,吸氣劑不應該改變或創造任何東西”。 並且兩次讀取屬性應該產生相同的結果(而每次創建一個新對象會有所不同。)

(我注意到在C#中,System.Drawing.Rectangle類有一個Size屬性,每次都返回一個新對象。)

創建新對象是一種很好的防御策略,可以防止修改對象的內部。

但是,它應該僅在您返回的對象是可變的時才應用,並且不是struct (無論如何都應該是不可變的[為什么?] )。

CGSize是一個struct ,所以你在這里創建一個新的值類型對象。 這正是您不存儲Size時應該執行的操作。

暫無
暫無

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

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