为什么c#不支持只读或只写自动属性?

UpT*_*eek 0 c#

我只是想知道c#不支持只读和只写自动属性的逻辑原因.

(即我的意思是只有get或set的属性,但不是两者.如果你试图定义这样的自动属性,你会得到一个编译器错误,告诉你自动属性必须同时具有get和set).

是否只是为了阻止人们不小心忘记添加一个?

谢谢

Tra*_*Guy 12

来自C#3.0规范:

将属性指定为自动实现的属性时,将为该属性自动提供隐藏的后备字段,并且实现访问器以读取和写入该后备字段.

由于支持字段不可访问,因此只能通过属性访问器读取和写入.这意味着自动实现的只读或只写属性没有意义,并且是不允许的.但是,可以不同地设置每个访问者的访问级别.因此,具有私有支持字段的只读属性的效果可以像这样模仿:

public class ReadOnlyPoint {
  public int X { get; private set; }
  public int Y { get; private set; }
  public ReadOnlyPoint(int x, int y) { X = x; Y = y; }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 7

您可以通过将setter设为私有来创建只读属性:

class A {
  public int Foo { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)


Yog*_*esh 5

当你永远不会有一个固定价值的时候,你想到这里去做什么?

MyPorperty { get; }
Run Code Online (Sandbox Code Playgroud)

即使您设置了该属性,如果您无法获得该值,有什么好处?

MyProperty { set; }
Run Code Online (Sandbox Code Playgroud)

如果您希望外部代码只能看到set或get访问器,则可以使用private关键字,如下所示:

MyProperty { get; private set; }
Run Code Online (Sandbox Code Playgroud)

要么

MyProperty { private get; set; }
Run Code Online (Sandbox Code Playgroud)