|
|
連載:[完全版]究極のC#プログラミング
Chapter13 自動実装と自動定義
川俣 晶
2010/02/17 |
|
|
13.7 匿名型の簡易記法
匿名型は、より少ない文字数で記述する簡易記法の一種であるが、さらに短く書くための手段が用意されている。
たとえば、あるメソッドで、引数として渡された値を使用して匿名型インスタンスを作りたいと思ったとしよう。通常の表記であれば、次のリスト13.14のように記述する。
using System;
class 座標
{
public double 緯度;
public double 経度;
}
class Program
{
private static void Sample( string name, 座標 pos )
{
var a = new {
補足 = "井の頭通り沿い",
name = name,
緯度 = pos.緯度,
経度 = pos.経度
};
// ……
// aを使用した何かの処理があるとする
// ……
Console.WriteLine("{0}, 緯度経度={1}, {2}, {3}",
a.name, a.緯度, a.経度, a.補足);
}
static void Main(string[] args)
{
var pos = new 座標();
pos.緯度 = 35.669569;
pos.経度 = 139.657581;
Sample("和田堀給水所", pos);
}
}
|
|
リスト13.14 通常の匿名型インスタンスの書き方 |
しかし、匿名型の記述は、次のリスト13.15のようにさらに簡素化できる。
var a = new { 補足 = "井の頭通り沿い", name, pos.緯度, pos.経度 };
|
|
リスト13.15 簡易表記による匿名型インスタンスの書き方 |
このとおり、name、緯度、経度の記述が大幅に簡素化された。実は、「=」を使わないで名前のみを記述すると、次のような解釈が行われる。
これらは、指定された変数などの名前と値を持つプロパティを匿名型に生成する表記である。つまり、すでに存在する変数などがあって、使用したい名前と同じ名前で宣言されていれば、その名前を書くだけで匿名型に取り込まれるわけである。
しかし、このような表記は、あくまで「同じ名前のプロパティ」を作る機能であり、値は初期化時にコピーされるにすぎないことに注意が必要である。つまり、もとになった変数を書き換えても、その値が反映されるわけではない。リスト13.16にその例を示す。
using System;
class Program
{
static void Main(string[] args)
{
var a = 123;
var x = new { a };
Console.WriteLine("a={0} x.a={1}", a, x.a);
// 出力:a=123 x.a=123
a = 456;
Console.WriteLine("a={0} x.a={1}", a, x.a);
// 出力:a=456 x.a=123
}
}
|
|
リスト13.16 もとになる変数を書き換えたとき |
Insider.NET 記事ランキング
本日
月間