-1

読み取り専用メンバーが定義されているクラス定義があります。

private readonly Dictionary<string, string> map = new Dictionary<string, string>();

設計をテストするために、クラス定義の外でこのメンバーにアクセスしたいと考えています。メソッドを提供することを考えgetていましたが、エラーのない構文を書くことができませんでした。

(を使用して)メンバーに値を割り当て、そのメソッドnewを定義することは可能ですか?get

PS: 私は C# 言語が初めてです。

編集: 私はコードを書いていません。すでに書かれたモジュールからコピーしたステートメントです。モジュールでいくつかの設計変更を行い、コードで可能な限り最小限の変更でテストしたいので、クラス外でこのメンバーの読み取り専用アクセスを取得しようとしていました。

4

5 に答える 5

2

フィールドへのパブリック アクセスを許可する読み取り専用プロパティを定義できます。

private readonly Dictionary<string, string> map = 
    new Dictionary<string, string>();

public Dictionary<string, string> Map
{
    get { return map; }
}

mapこれは、ディクショナリ自体の内容を変更するのではなく、外部クラスが に割り当てられたインスタンス参照を変更するのを防ぐだけであることに注意してください。

于 2012-12-12T14:01:11.390 に答える
2

クラスのプライベート メンバーのテストを書くべきではないと主張する人もいるかもしれません。テストは public インターフェイスのみを使用し、クラスの内部には依存しないでください。これは、テストを中断することなくクラスの内部をリファクタリングできる必要があるためです。

「テスト専用」の公開ゲッターを追加すると、誰かがプロジェクトのどこかで使い始めるという保証はありません。

本当にディクショナリを公開して .NET 4.5 を使用したい場合は、ReadOnlyDictionaryclass を使用して、呼び出し元が何も変更しないようにします。

public IDictionary<string, string> Map
{
    get { return new ReadOnlyDictionary<string, string>(map); }
}
于 2012-12-12T14:02:18.130 に答える
0

単純なゲッターを作成するだけです

public  Dictionary<string, string> Mapping
{
   get { return map; }
}
于 2012-12-12T14:00:26.183 に答える
0

このようなことを意味しますか?

readonly Dictionary<string, string> _map = new Dictionary<string, string>();

public Dictionary<string, string> Map
{
    get { return _map; }
}

なぜこの変数を作っているのですreadonlyか?


ディクショナリに含まれる値へのアクセスを許可しようとしている場合は、変更を許可せずにディクショナリを公開するメソッドを作成できます。

public string GetMapValue(string key)
{
    return _map[key];
}
于 2012-12-12T14:00:45.473 に答える
0

publicを返すプロパティ関数を記述できますprivate readonly map。たとえば、次のようになります。

public Dictionary<string, string> Map { { get { return map; } } }

ただし、Dictionaryは依然として変更可能です。読み取り専用が必要な場合はDictionary、このSO questionを参照してください。

于 2012-12-12T14:01:15.457 に答える