連載:[完全版]究極の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 };


 INDEX
  [完全版]究極のC#プログラミング
  Chapter13 自動実装と自動定義
    1.13.1 ラムダ式を使ったダーティテク―refの代役
    2.13.2 自動実装プロパティ
    3.13.3 自動実装プロパティのアクセス制御
    4.13.4 読み出し専用、書き込み専用はない
    5.13.5 “名無し”のクラス―匿名型
  6.13.6 匿名型の等価性
    7.13.7 匿名型の簡易記法
    8.13.8 匿名型の使用目的
    9.13.9 オブジェクト初期化子
    10.13.10 オブジェクト初期化子の本質とは?
    11.13.11 コレクションはreadonlyでも初期化できる
    12.13.12 オブジェクト初期化子の使用例/練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間