我只是想知道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)
您可以通过将setter设为私有来创建只读属性:
class A {
public int Foo { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
当你永远不会有一个固定价值的时候,你想到这里去做什么?
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)
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |