我经常编写在属性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?各种受欢迎的人都认为这是不好的做法,例如:"是的,这是不好的做法。理想情况下,吸气剂不应该改变或创造任何东西"。并且两次读取属性应该产生相同的结果(而每次创建一个新对象会有所不同。)
(我注意到在C#中,System.Drawing.Rectangle类有一个Size属性,每次都返回一个新对象。)
答案 0 :(得分:3)
创建新对象是防止修改对象内部的良好防御策略。
但是,只有在您返回的对象是可变对象时才应用它,并且不是struct
(无论如何 [why?]都应该是不可变的。)
CGSize
是struct
,因此您在此处创建一个新的值类型对象。这正是您不存储Size
时应该执行的操作。