C#でオブジェクトまたはセットの初期値設定項目を使用して初期化する操作の詳細

4703 ワード

オブジェクト初期値設定項目を使用してオブジェクトを初期化
オブジェクトの初期値設定項目を使用して、タイプのコンストラクション関数を明示的に呼び出すことなく、タイプオブジェクトを宣言的に初期化できます.次の例では、オブジェクトの初期値設定項目を名前付きオブジェクトに使用する方法を示します.コンパイラは、デフォルトのインスタンスコンストラクション関数にアクセスしてから、メンバー初期化処理オブジェクトの初期値設定項目を処理します.したがって、デフォルトのコンストラクション関数がクラスでprivateとして宣言されている場合、共通アクセス権が必要なオブジェクトの初期値設定項目は失敗します.
次の例では、オブジェクトの初期値設定項目を使用して新しいStudioタイプを初期化する方法を示します.

public class Program
{
  public static void Main()
  {

    // Declare a StudentName by using the constructor that has two parameters.
    StudentName student1 = new StudentName("Craig", "Playstead");

    // Make the same declaration by using an object initializer and sending 
    // arguments for the first and last names. The default constructor is 
    // invoked in processing this declaration, not the constructor that has
    // two parameters.
    StudentName student2 = new StudentName
    {
      FirstName = "Craig",
      LastName = "Playstead",
    };

    // Declare a StudentName by using an object initializer and sending 
    // an argument for only the ID property. No corresponding constructor is
    // necessary. Only the default constructor is used to process object 
    // initializers.
    StudentName student3 = new StudentName
    {
      ID = 183
    };

    // Declare a StudentName by using an object initializer and sending
    // arguments for all three properties. No corresponding constructor is 
    // defined in the class.
    StudentName student4 = new StudentName
    {
      FirstName = "Craig",
      LastName = "Playstead",
      ID = 116
    };

    System.Console.WriteLine(student1.ToString());
    System.Console.WriteLine(student2.ToString());
    System.Console.WriteLine(student3.ToString());
    System.Console.WriteLine(student4.ToString());
  }
}


このセクションの出力は次のとおりです.

Craig 0
Craig 0
183
Craig 116

public class StudentName
{
  // The default constructor has no parameters. The default constructor 
  // is invoked in the processing of object initializers. 
  // You can test this by changing the access modifier from public to 
  // private. The declarations in Main that use object initializers will 
  // fail.
  public StudentName() { }

  // The following constructor has parameters for two of the three 
  // properties. 
  public StudentName(string first, string last)
  {
    FirstName = first;
    LastName = last;
  }

  // Properties.
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public int ID { get; set; }

  public override string ToString()
  {
    return FirstName + " " + ID;
  }
}


次の例では、セット初期値設定項目を使用してStudentNameタイプのセットを初期化する方法を示します.コレクション初期値設定項目は、カンマで区切られた一連のオブジェクト初期値設定項目であることに注意してください.

List students = new List()
{
 new StudentName {FirstName="Craig", LastName="Playstead", ID=116},
 new StudentName {FirstName="Shu", LastName="Ito", ID=112},
 new StudentName {FirstName="Gretchen", LastName="Rivas", ID=113},
 new StudentName {FirstName="Rajesh", LastName="Rotti", ID=114}
};


コレクション初期値設定項目を使用して辞書を初期化
Dictionaryには、キー/値ペアのセットが含まれています.そのAddメソッドは2つのパラメータを採用し,1つはキー,もう1つは値である.DictionaryメソッドまたはAddメソッドを初期化して複数のパラメータの任意のセットを使用するには、次の例に示すように、各パラメータのセットをカッコで囲みます.例次のコード例では、StudentNameタイプのインスタンスを使用してDictionaryを初期化します.

class StudentName
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public int ID { get; set; }
}

class CollInit
{
  Dictionary students = new Dictionary()
  {
    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}},
    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}},
    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}
  };
}


コレクションの各要素の2対のカッコに注意してください.最内層の括弧はStudentNameのオブジェクト初期値を表し、最外層の括弧はstudentsDictionaryに追加するキー/値ペアの初期値を表します.最後に、辞書のセット全体の初期値は括弧のペアに囲まれます.