C#结构应该只具有只读属性

Jam*_*uth 2 c# struct

我在读虽然关于在计算器上不纯的方法问题,在这里,它让我想起了结构设计的最佳实践.

阅读有关创建不可变结构的示例,此处属性仅定义为getter.

public DateTime Start { get { return start; } }
public DateTime End { get { return end; } }
public bool HasValue { get { return hasValue; } }
Run Code Online (Sandbox Code Playgroud)

其他地方的其他示例包括System.Drawing.Point属性中的getter和setter.

public int Y {
    get {
        return y;
    }
    set {
        y = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

设计准则不指定,但他们都相当简洁.结构属性的推荐方法是什么?只读或允许写作?

BJ *_*ers 5

设计指南非常明确:

X不要定义可变值类型.

可变值类型有几个问题.例如,当属性getter返回值类型时,调用者会收到一个副本.由于副本是隐式创建的,因此开发人员可能不会意识到他们正在改变副本,而不是原始值.此外,某些语言(特别是动态语言)在使用可变值类型时遇到问题,因为即使局部变量在解除引用时也会导致复制.

至于System.Drawing.Point,还有其他因素(如性能)足以打破这一设计准则.请参阅为什么System.Drawing Rectangle,Point,Size等可变结构而不是类?