我经常编写在属性 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;
}
}
这有什么问题吗?
参见此处:Is object creation in getters bad practice?各种赞成的人建议这是不好的做法,例如:“是的,这是不好的做法。理想情况下, setter/getter 不应该改变或创造任何东西”。并且两次读取一个属性应该产生相同的结果(而每次创建一个新对象都会不同。)
(我注意到在 C# 中,System.Drawing.Rectangle 类有一个 Size 属性,它每次都会返回一个新对象。)
最佳答案
创建新对象是一种很好的防御策略,可以防止修改对象的内部结构。
但是,只有当您返回的对象是可变的,而不是 struct
(它无论如何都应该是不可变的 [why?] )时才应该应用它。
CGSize
是一个struct
,所以您在这里创建了一个新的值类型对象。当您不存储 Size
时,这正是您应该做的。
关于c# - 返回新对象的 C# 属性 getter 是最佳实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48607606/