У вас нет модификатора доступа для этого, но вы можете получить что-то вроде этого:
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
. Поскольку внешние классы не имеют доступа к этому прокси, вы удовлетворили ваше требование.