我只是想知道c#不支持只读和只写自动属性的逻辑原因。
(即我的意思是只有get或set的属性,但不是两者。如果你试图定义这样的自动属性,你会得到一个编译错误,告诉你auto属性必须同时有get和set)。
是否只是为了阻止人们意外忘记添加一个?
由于
答案 0 :(得分:12)
来自C#3.0规范:
将属性指定为 自动实现属性,a 隐藏的支持字段是自动的 可用于酒店,以及 实现访问器以进行读取 并写信给那个支持领域。
因为支持字段是 无法访问,可以阅读和 只能通过酒店写下来 存取。这意味着 自动实现只读或 只写属性不会 感觉,并被禁止。它是 但是可以设置访问权限 每个访问者的级别不同。 因此,只读的效果 具有私人支持领域的财产 可以像这样模仿:
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; }
}
答案 1 :(得分:7)
您可以通过将setter设为私有来创建只读属性:
class A {
public int Foo { get; private set; }
}
答案 2 :(得分:5)
当你没有设定值时,你想到达什么地方?
MyPorperty { get; }
即使您设置了该属性,如果无法获得该值,有什么好处?
MyProperty { set; }
如果您希望外部代码只能看到set或get访问器,则可以使用如下的private关键字:
MyProperty { get; private set; }
或
MyProperty { private get; set; }
答案 3 :(得分:1)
如果你只有一个getter,这个auto-property怎么能返回一些有用的东西?
同样的逻辑适用于setter。
:)
如果您的想法是继承,那么您可以将其标记为摘要并执行您想要的操作:
//this compiles successfully
public abstract Name { get; }
//this tooo
public abstract Age { set; }
答案 4 :(得分:1)