Доступ к скрытому базовому свойству внешнего класса из вложенного класса - PullRequest
2 голосов
/ 19 января 2012

Допустим, у меня есть класс, свойство которого скрывает его базовое свойство, и вложенный класс внутри этого класса.Можно ли получить доступ к базовому скрытому * virtual * свойству из вложенного класса?

Вот пример:

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 Ответ

5 голосов
/ 19 января 2012

Вы можете привести свою InheritedClass ссылку на BaseClass. Поскольку вы скрываете свойство base вместо того, чтобы переопределять его, это должно сработать.

public void SomeMethod()
{
    BaseClass baseRef = parent;
    // do stuff with the base property:
    baseRef.SomeProperty = someValue;
}

Edit:

Чтобы сделать эту работу, свойство SomeProperty BaseClass должно быть доступно для вложенного класса, либо сделав его internal (если вы не хотите, чтобы свойство было доступно вне объявленной сборки ) или protected internal (если вы хотите разрешить переопределение в производных классах из других сборок).

Если оба параметра недоступны (т. Е. Когда ваш производный класс уже находится в другой сборке), вы не сможете объявить свойство оболочки.

private string SomeBaseProperty
{
    get
    {
        return base.SomeProperty;
    }

    set
    {
        base.SomeProperty = value;
    }
}
...