从嵌套类访问外部类隐藏的基本属性

时间:2012-01-19 12:07:03

标签: c# inheritance nested-class

假设我有一个类,它有一个隐藏它的基本属性的属性,并且在这个类中有一个嵌套类。是否可以从嵌套类访问基本隐藏 * 虚拟 *属性?

以下是一个例子:

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是否有更好的解决方案?

1 个答案:

答案 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