内部类成员/属性可见性(C#)

时间:2011-11-24 09:59:37

标签: c# nested visibility

我正在寻找内部类属性的可见性修饰符,它允许外部类修改/设置值,但外部类只能获取/读取值。

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

答案 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的例子是你能得到的最接近的。