1

私は C# が初めてなので、アクセサーとオブジェクト初期化子は私にとってまったく新しい概念です。そうは言っても、次の例が本当に混乱していることを除いて、私はそれらをうまく処理していると思います。

using System;
using System.Collections.ObjectModel;

class How {
    public ObservableCollection<int> Coll {
        get { return coll_; }
        set {
            Console.WriteLine("Setter for Coll Called!");
            coll_.Clear();
            foreach (int i in value)
                coll_.Add(i);
        }
    }

    public string Field {
        get { return field_; }
        set {
            Console.WriteLine("Setter for field called");
            field_ = value;
        }
    }

    // To confirm the internal coll_ is actually set
    public void Test() {
        foreach(int i in coll_)
            Console.Write(i + " ");
    }

    public How() {
        coll_ = new ObservableCollection<int>();
        field_ = "";
    }

    private ObservableCollection<int> coll_;
    private string field_;
}

public class Test {
    public static void Main() {
        var how = new How {
            Coll = { 1, 2, 3, 4, 5 },
            Field = "Test Field",
        };

        Console.Write("Coll: ");
        foreach (int i in how.Coll)
            Console.Write(i + " ");
        Console.WriteLine();

        Console.WriteLine("Field: " + how.Field);


        Console.Write("Internal coll_: ");
        how.Test();
        Console.WriteLine();
    }
}

上記のコードの出力は次のとおりです (実例はこちらをご覧ください):

Setter for field called
Coll: 1 2 3 4 5 
Field: Test Field
Internal coll_: 1 2 3 4 5 

Field期待どおりに動作しますが、Coll混乱します。これCollは、コレクション初期化子がプロパティ (または少なくとも非自動プロパティ) と混合しないことを意味します。ただし、その場合は、コンパイル時のエラーが予想されます。

動作のその部分に関係なく、私をさらに混乱させるのは、の内部値coll_が何らかの形で初期化子の値に設定されていることです。

Colla)の set が呼び出されない理由と、C# で の値を設定する方法を知りたいですcoll_CollC# がcoll_内部ストレージとして識別するのに十分なget および set アクセサーでのその識別子の使用です。それとも、対応する型の唯一のメンバーであるため設定されているのでしょうか?

4

1 に答える 1