3
[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);
    }
}

UniqueNamedItem.Name プロパティに public get アクセサーがあるにもかかわらず、私の addChild 関数内で bn.Name の呼び出しが有効でない理由を教えてください。

4

6 に答える 6

12

クラスのメンバーのデフォルトのアクセシビリティprivateは です。

そうIdNameあるprivate

正しいアクセス修飾子を追加する必要があります (私が追加したのpublicは、あなたが意図したものかもしれませんprotected):

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

必要なアクセシビリティを常に宣言する正当な理由の 1 つです。

于 2012-08-16T20:35:39.237 に答える
4

UniqueNamedItem.Nameプロパティ自体は次のとおりですprivate。プロパティを明示的に としてマークする必要がありますpublic

アクセサーの修飾子は、アクセスをさらに制限することはできますが、増加させることはできません。

于 2012-08-16T20:35:44.927 に答える
1

プロパティを public として宣言する必要があります (以下を参照)。デフォルトはプライベートです。

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    public int Id { public get; protected set; }
    [DataMember]
    public string Name { public get; protected set; }
}
于 2012-08-16T20:36:58.590 に答える
1

プロパティを公開する必要があります。

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    public int Id { public get; protected set; }
    [DataMember]
    public string Name { public get; protected set; }
}
于 2012-08-16T20:37:47.273 に答える
1

プロパティは明示的にパブリックとしてマークされていないため、C# は自動的にそれらをプライベートと見なします。

そう:

[DataContract]
public class UniqueNamedItem
{
    [DataMember]
    int Id { public get; protected set; }
    [DataMember]
    public string Name { public get; protected set; }
}
于 2012-08-16T20:40:04.830 に答える
1

デフォルトのアクセスは非公開です。なぜなら、本当に非公開にすべきものを公開しても、正しいコードの動作が妨げられることはなく、気付くまでに何年もそのままになる可能性があるからです (これは当時の重大な変更でもあります)。修理する)。

一方、何かを公開すべきときに非公開にすると、何かがすぐに機能しなくなり、スタックオーバーフローに進み、多くの人がそれを非公開だと言い、あなたはそれを修正し、すべてがうまくいきます.

したがって、これは賢明なデフォルトです。

于 2012-08-16T20:58:16.460 に答える