c#公共财产无法访问

时间:2012-08-16 20:33:25

标签: c# properties public

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    int Id { public get; protected set; }
    [DataMember]
    string Name { public get; protected set; }
}

[KnownType(typeof(UniqueNamedItem))]
[DataContract]
public class BasicNode : UniqueNamedItem
{
    [DataMember]
    SortedList<string, BasicNode> Children { public get; private set; }

    public void addChild(BasicNode bn)
    {
        this.Children.Add(bn.Name, bn);
    }
}

你能告诉我为什么在我的addChild函数中,对bn.Name的调用无效,即使UniqueNamedItem.Name属性有一个公共get访问器吗?

6 个答案:

答案 0 :(得分:12)

班级成员default accessibilityprivate

所以IdNameprivate

您需要添加正确的访问修饰符(我添加了public,您可能需要protected):

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    public int Id { public get; protected set; }
    [DataMember]
    public string Name { public get; protected set; }
}

总是声明您想要的辅助功​​能的一个很好的理由。

答案 1 :(得分:4)

UniqueNamedItem.Name属性本身为private;您需要将属性明确标记为public

访问者的修饰符只能进一步限制访问,而不是增加访问。

答案 2 :(得分:1)

您需要将您的属性声明为公开(请参阅下文)。默认为私有。

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    public int Id { public get; protected set; }
    [DataMember]
    public string Name { public get; protected set; }
}

答案 3 :(得分:1)

您需要公开您的财产:

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    public int Id { public get; protected set; }
    [DataMember]
    public string Name { public get; protected set; }
}

答案 4 :(得分:1)

您的属性未明确标记为公共属性,因此C#会自动将其视为私有属性。

所以:

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    int Id { public get; protected set; }
    [DataMember]
    public string Name { public get; protected set; }
}

答案 5 :(得分:1)

默认访问权限是私有的,因为如果你将某些内容公之于众,那么它就不会让任何正确的代码停止工作,并且在你意识到之前它可能会持续多年(并且&# 39; s也是一个突破性的变化然后修复它。)

另一方面,如果你应该公开一些东西私有,有些东西会立即停止工作,你继续使用stackoverflow,一群人说它是私有的,你修复它,一切都很好。

因此,这是明智的默认。