我正在寻找内部类属性的可见性修饰符,它允许外部类修改/设置值,但外部类只能获取/读取值。
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;
}
}
答案 0 :(得分:4)
你没有这方面的访问修饰符,但你可以逃避这样的事情:
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
成员并为封闭类提供代理来为给定{{1}设置attribute
属性的事实。实例。由于外部类无法访问此代理,因此您满足了您的要求。
答案 1 :(得分:0)
由于Inner class member / attribute不是静态的,因此您无法保持或修改该成员的状态。
我认为John Angelo的例子是你能得到的最接近的。