C# 3.0 で導入されたオブジェクト初期化子とコレクション初期化子
C# 3.0 ではオブジェクト初期化子とコレクション初期化子というものが導入されました。
要はオブジェクトおよびコレクションの初期化方法を簡略化するものです。
周知の通り C# はオブジェクト指向言語であり、オブジェクトはそのライフサイクルの全体で内部データの一貫性を保ち、いつでも利用可能であることが基本的な考え方といえます。
C# 3.0 では、オブジェクトのライフタイムのなるべく初期、理想的には生成時から適切に内部データの初期化を行えるように、初期化子が強化されました。
オブジェクト初期化子
こここでは具体的に例を見ることで、初期化子の使い方を説明します。
オブジェクト初期化子 (object initializers) というのは、次のように利用します。
コンストラクタを明示的に呼び出さずに、オブジェクトの生成時にプロパティを通して内部データを初期化していることに着目してください。
using System;
namespace Initializer1
{
class Person
{
int age;
string name;
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public void ShowInfo()
{
Console.WriteLine("{0} ({1})", name, age);
}
}
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
p1.Age = 30;
p1.Name = "Ichiro Suzuki";
Person p2 = new Person()
{
Age = 40,
Name = "Ryan Mayfield"
};
p1.ShowInfo();
p2.ShowInfo();
}
}
}
実行結果は次の通りです。
Ichiro Suzuki (30) Ryan Mayfield (40)
コレクション初期化子
コレクション内の要素を初期化するための、コレクション初期化子 (collection initializer) の例は次の通りです。
using System;
using System.Collections.Generic;
namespace Initializer2
{
class Person
{
int age;
string name;
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public void ShowInfo()
{
Console.WriteLine("{0} ({1})", name, age);
}
}
class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>{
new Person() {
Age = 10,
Name = "Hanako Yamada"
},
new Person() {
Age = 20,
Name = "Ichiro Suzuki"
}
};
foreach (Person p in people)
{
p.ShowInfo();
}
}
}
}
実行結果は次の通りです。
Hanako Yamada (10) Ichiro Suzuki (20)
通常コレクションを使うには、コレクションを生成してから Add メソッドを利用することによって、そのコレクションに要素を追加します。
しかし、コレクション初期化子を利用することによって、コレクションの初期化が非常に容易に、簡潔に記述できることがわかります。