1

こんにちは、以下のコードの目的は、関連するデータセットを保持する静的クラスを返すことです。私がこれをより良くする方法をお勧めできますか?

public class People
{
    //want info to be setup in this class, so it can be accessed elsewhere
    public static readonly string[] ab = { "ALBERT", "EINSTEIN"};       
    public static readonly string[] dk = { "DONALD", "KNUTH" };

   //is this efficient or instantiated once per access? IF SO HOW CAN I DO THIS BETTER? 
    public static readonly Info AB = new Info(ab, 100); 
    public static readonly Info DK = new Info(dk, 80);

}

public class Info
{
    private string[] _name;
    private int _age;

    public string[] Name { get{ return _name}; }
    public int Age { get { return _age; } }

    public Info(string[] n, int a)
    {
        _name = n;
        _age = a;
    }
}
4

1 に答える 1

3

これは効率的ですか、アクセスごとに1回インスタンス化されますか?

Infoのインスタンスが構築される瞬間を意味する場合、それらはメンバーへの最初のアクセスの前に構築されます。したがって、 を何回呼び出しPeople.ABても、オブジェクトは同じになります。

静的クラスと静的クラス メンバーに関する MSDN から:

静的メンバーは、静的メンバーが初めてアクセスされる前、および静的コンストラクター (存在する場合) が呼び出される前に初期化されます。

のインスタンスを完全に不変にしたい場合Info(Daniel が言うよう_nameに、配列への参照を取得すると の値を変更できます)、 の型_nameとそのプロパティ アクセサを次のように変更できます。

private List<string> _name;

public IList<string> Name { get { return _name.AsReadOnly(); } }

私はあなたのニーズを理解したことを願っています!

于 2012-05-26T00:32:54.757 に答える