假设我有一个类,它有一个隐藏它的基本属性的属性,并且在这个类中有一个嵌套类。是否可以从嵌套类访问基本隐藏 * 虚拟 *属性?
以下是一个例子:
class BaseClass
{
protected virtual String SomeProperty {get; set;}
}
class Inherited : BaseClass
{
protected new String SomeProperty {get; set;}
class Nested
{
Inherited parent;
public Nested(Inherited parent)
{
this.parent = parent;
}
public void SomeMethod()
{
//How do I access the SomeProperty which belongs to the BaseClass?
}
}
}
我能想到的唯一解决方案是向Inherited类添加一个私有方法,返回base.SomeProperty
是否有更好的解决方案?
答案 0 :(得分:5)
您可以将InheritedClass
引用转换为BaseClass
。由于你隐藏了基本属性而不是覆盖它,这应该可以解决问题。
public void SomeMethod()
{
BaseClass baseRef = parent;
// do stuff with the base property:
baseRef.SomeProperty = someValue;
}
修改强>
要使这项工作正常,SomeProperty
的{{1}}属性必须可以被嵌套类访问,方法是BaseClass
(如果你不想让它成为{1}}在声明程序集之外可访问的属性)或internal
(如果要允许覆盖其他程序集中的派生类)。
如果两个选项都没有限制(例如,当你的派生类已经在另一个程序集中时),你就不会声明一个包装器属性。
protected internal