連載:[完全版]究極の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 オブジェクト初期化子でコレクションを初期化


 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 記事ランキング

本日 月間