【发布时间】:2015-10-03 09:45:21
【问题描述】:
我有一个基类和一个派生类。每个都具有相同的属性,具有 private 设置器,因此可以通过类内的某些逻辑设置值。
class First
{
internal virtual int Value { get; private set; }
void SetValue(int toValue)
{
Value = toValue;
}
}
class Second : First
{
internal override int Value { get; private set; }
void SetValue(int toValue)
{
Value = toValue;
}
}
这会导致编译器错误:
属性或索引器 ... 不能在此上下文中使用,因为 set 访问器不可访问。
为什么会这样,我怎样才能实现我想要做的事情?这对于自动实现的属性是不可能的吗,换句话说,我是否必须使用支持字段?
【问题讨论】:
-
你真正想要达到什么目的?拥有同名的独立属性对我来说听起来像是灾难的秘诀。
-
这就是虚拟成员背后的重点:能够在派生类中用更具体的逻辑覆盖它们。我不确定我是否遵循你的推理。
-
但是你没有具体的逻辑——你只有另一个自动实现的属性。而且,如果您将属性视为公共获取和私有集,那么您不能覆盖私有方法是完全有道理的。再说一次,你真正想要达到什么目的?你能举一个更有意义的例子吗?
标签: c# inheritance properties access-modifiers