|
|
連載:[完全版]究極のC#プログラミング
Chapter13 自動実装と自動定義
川俣 晶
2010/02/17 |
|
|
13.9 オブジェクト初期化子
匿名型は、LINQと併用する場合を除き、出番はあまり多くないだろう。その理由は、匿名型に課せられた最大の制限が“匿名”であるという点にある。名前さえあれば、自由に受け渡して加工できるが、それがないのである。
ならば、名前のあるオブジェクトをもっと簡単に作り出す構文があればよいことになる。それがC# 3.0の「オブジェクト初期化子」ということになる。
たとえば、先ほどのリスト13.14を見ると、「座標」オブジェクトの初期化が回りくどいことがわかる(以下のリスト13.18、リスト13.19に抜粋)。
class 座標
{
public double 緯度;
public double 経度;
}
|
|
リスト13.18 座標クラス |
var pos = new 座標();
pos.緯度 = 35.669569;
pos.経度 = 139.657581;
|
|
リスト13.19 座標オブジェクトの初期化 |
これは、オブジェクト初期化子を用いると、リスト13.20のように簡略化できる。
var pos = new 座標() { 緯度 = 35.669569, 経度 = 139.657581 };
|
|
リスト13.20 オブジェクト初期化子で初期化する |
中カッコ内に書いた、「フィールド/プロパティ名 = 初期化式」というリストが、そのオブジェクトの該当フィールド/プロパティ名の値を初期化する。
すべてのフィールド/プロパティ名について記述する必要はなく、書かなかったフィールド/プロパティはクラス側で用意した初期値で初期化される。
コレクションもこの構文で初期化できる。次のリスト13.21に、List<T>クラスをオブジェクト初期化子により初期化している例を示す。
using System;
using System.Collections.Generic;
class A
{
public List<int> list = new List<int>();
}
class Program
{
static void Main(string[] args)
{
var a = new A() { list = { 2, 3, 5, 7, 11, 13 } };
a.list.ForEach((i) => { Console.WriteLine("{0}", i); });
// 出力:
// 2
// 3
// 5
// 7
// 11
// 13
}
}
|
|
リスト13.21 オブジェクト初期化子でコレクションを初期化 |
Insider.NET 記事ランキング
本日
月間