0

簡単な例。 代替テキストhttp://img19.imageshack.us/img19/1854/51445300.jpg

TDMFileオブジェクトのbuldierであるクラスTDMReaderがあり、自動実装プロパティを使用しています。

    public string Name
    {
        get;
        set;
    }

    public Group[] Groups
    {
        get;
        set;
    }  

私がやりたいのは、TDMReaderメソッドでのみセッターにアクセスできるようにすることです。C ++では、プライベート変数にアクセスするためのフレンドメソッドを使用できます。Javaでは、1つのパケットでそれらを作成して、フィールドにアクセスできます。私にはいくつかのアイデアがありますが、この自動実装では実行が少し複雑になります。ナイトソリューションのアイデアはありますか?:)

4

2 に答える 2

4

自動プロパティはこれとは関係ありません。自動プロパティと「手動」プロパティにも同じオプションを使用できます。次のように、セッターのアクセスを制限できます。

// Setter access only to this type and nested types
public string Name { get; private set; }
// Setter access within the assembly
public Group[] Groups { get; internal set; }

...しかし、単一のクラスに対してそれを行うことはできません(そのクラスが宣言型内にネストされている場合を除き、その場合privateは問題ありません)。.NETまたはC#には、名前空間に制限のあるアクセスはありません。

(プロパティがどのクラスで宣言されているかは完全には明確ではありません。プロパティのTdmReader場合はプライベートにします。TdmFileプロパティの場合は、上記の問題が発生します。)

于 2010-05-12T20:16:34.303 に答える
2

このような:

public string Name
{
    get;
    private set;
}

public Group[] Groups
{
    get;
    private set;
}  

キーワードを追加することによりprivate、セッターは同じクラスのコードによってのみアクセス可能になります。追加internalして、同じプロジェクトのコードにアクセスできるようにすることもできます。


配列をプロパティとして公開することは、非常に貧弱な設計であることに注意してください。代わりに、名前空間でまたは
を公開する必要があります。Collection<Group>ReadOnlyCollection<Group>System.Collections.ObjectModel

于 2010-05-12T20:15:55.373 に答える