在实例化时使用{}大括号设置属性

时间:2011-06-10 15:38:24

标签: c# instantiation

任何人都知道为什么以下不会编译? ID的setter应该是两个类的私有,那么为什么我们可以实例化ClassA而不是ClassB?

public class ClassA {
    public string ID { get; private set; }

    public void test() {
        var instanceA = new ClassA() { ID = "42" };
        var instanceB = new ClassB() { ID = "43" };
    }

    public class ClassB {
        public string ID { get; private set; }
    }
}

由于

3 个答案:

答案 0 :(得分:10)

test()ClassA的成员,因此它可以访问A的私有成员(和设置者)。可以访问私有成员或ClassB的setter,因此在instanceB上的错误,但不是instanceA。

有关私人会员可访问性的更多信息,建议您在相关问题上查看this answer

答案 1 :(得分:3)

您的Test方法位于Class A,以便可以访问。

答案 2 :(得分:0)

Class B位于Class A内,A无法仅仅因为合成而访问B的私人成员。