Внутренний член класса / атрибут видимости (C #) - PullRequest
2 голосов
/ 24 ноября 2011

Я ищу модификатор видимости для атрибутов внутреннего класса, который позволил бы внешнему классу изменять / устанавливать значение, но внешние классы могли только получать / читать значение.

public class Outer {
    public class Inner {
        // I want this to be editable by Outer instances
        // but read-only to other external classes.
        public string attribute;
    }
}

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

У вас нет модификатора доступа для этого, но вы можете получить что-то вроде этого:

public class Outer
{
    private static Action<Inner, string> InnerAttributeSetter;

    public class Inner
    {
        static Inner()
        {
            Outer.InnerAttributeSetter = (inner, att) => inner.Attribute = att;
        }

        public string Attribute { get; private set; }
    }

    public Outer()
    {
        var inner = new Inner();

        InnerAttributeSetter(inner, "Value");

        Console.WriteLine(inner.Attribute);
    }
}

По сути, вы используете тот факт, что вложенные классы имеют доступ к private членам включающего класса и предоставили включающему классу прокси-сервер для установки свойства attribute для данного экземпляра Inner. Поскольку внешние классы не имеют доступа к этому прокси, вы удовлетворили ваше требование.

0 голосов
/ 24 ноября 2011

Поскольку внутренний член / атрибут класса не является статичным, вы не можете удерживать или изменять состояние этого члена.

Я думаю, что пример Джона Анджело подходит ближе всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...