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

我经常编写在属性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属性,每次都返回一个新对象.)

解决方法:

创建新对象是一种很好的防御策略,可以防止修改对象的内部.

但是,它应该仅在您返回的对象是可变的时才应用,并且不是结构(无论如何应该是不可变的 [why?]).

CGSize是一个结构,所以你在这里创建一个新的值类型对象.这正是您不存储尺寸时应该执行的操作.

上一篇:Spring 上传文件


下一篇:如何在Java中实现一个实现Runnable的对象的方法?