|
|
連載:[完全版]究極のC#プログラミング
Chapter13 自動実装と自動定義
川俣 晶
2010/02/17 |
|
|
13.6 匿名型の等価性
前節ですでに書いたとおり、同じ名前、同じ型、同じ並び順の匿名型は同一のクラスによって実現される。そのため、次ページのリスト13.13のように「研修生情報 = 振込後情報」といった代入は可能となっている。
using System;
class Program
{
static void Main(string[] args)
{
var 研修生情報 = new { 名前 = "網島研修生", 口座残高 = 39 };
var 振込後情報 = new { 名前 = "網島研修生", 口座残高 = 5000 };
Console.WriteLine( "名前: {0} 口座残高: {1:C}",
研修生情報.名前, 研修生情報.口座残高);
// 出力:名前: 網島研修生 口座残高: \39
研修生情報 = 振込後情報;
Console.WriteLine("名前: {0} 口座残高: {1:C}",
研修生情報.名前, 研修生情報.口座残高);
// 出力:名前: 網島研修生 口座残高: \5,000
}
}
|
|
リスト13.13 相互代入できる匿名型のオブジェクト |
しかし、「同じ名前、同じ型、同じ並び順」という条件が1つでも外れると、型は互換にならない。
たとえば、次のように名前が食い違えば異なる型になり、コンパイルは通らなくなる。
var 研修生情報 = new { 名前 = "網島研修生", 口座残高 = 39 };
var 振込後情報 = new { Name = "網島研修生", 口座残高 = 5000 };
|
|
また、次のように順番を変えてもコンパイルエラーになる。
var 研修生情報 = new { 名前 = "網島研修生", 口座残高 = 39 };
var 振込後情報 = new { 口座残高 = 5000, 名前 = "網島研修生" };
|
|
もちろん、次のように型を変えてもコンパイルエラーになる(「39」はInt32型、「5000u」はUInt32型になり、型が一致しない)。
var 研修生情報 = new { 名前 = "網島研修生", 口座残高 = 39 };
var 振込後情報 = new { 名前 = "網島研修生", 口座残高 = 5000u };
|
|
Insider.NET 記事ランキング
本日
月間