【发布时间】:2012-12-15 12:53:19
【问题描述】:
不确定这是否可以做到,但我需要计算一个大小并将其存储在一个基类中,然后将该结果作为只读方式公开给子类。将 Size 本身设置为只读很容易,只需将其隐藏在具有受保护的 getter 和私有 setter 的属性后面,就像这样......
private Size _someSize;
protected Size SomeSize
{
get{ return _someSize; }
private set{ _someSize = value; }
}
然后在基类中,我可以这样设置...
SomeSize = new Size(23.0, 14.7);
...但是我不能从子类中这样做,因为 setter 是基类私有的。
不过,我也不希望子类能够修改 Size 结构的成员。
更新
在子类中,如果你尝试编译这个......
SomeSize.Width = 17.0;
...您将收到错误消息“无法修改 SomeSize 的返回值,因为它不是变量”,因此它确实像我希望的那样保护了基类中的值。
不过,如果有人能弄清楚如何让 getter 返回一个 true 只读结构(如果这样的事情是可能的,我对此表示怀疑),我会给你答案.当然,这个问题实际上并不需要这样做,但知道它是否可以完成仍然是一件好事。
【问题讨论】:
-
类Size你也实现了吗?
-
也许使用base.new(基类构造函数)(不知道c#语法到底...)
-
没有。它是 .NET 框架的一部分。我知道我可以用 'readonly' 属性标记一个变量来做到这一点,但是我不能用它作为 getter/setter 的支持,因为我不能改变它。
-
你是只在构造函数中设置值,还是可以通过方法调用来设置/更新?
-
你测试了吗? Size 是一个结构(值类型),而不是一个类(引用类型),因此属性 getter 应该返回内部大小的副本,而不是对它的引用。因此,当子类更改属性返回的大小的 Width 属性时,它不应该触及私有 _someSize。除非我错了......
标签: c# struct constants structure readonly