もっとオブジェクト初期化子
昨日、nsharp さんにコメントで教えてもらった、
> initializerはクラスのフィールド宣言部でも使えることに最近気づいたり。
が、使ってみたらとても印象的だったのでちょっと長めのコードを載せてみます。
デザイナで生成したコードを切り貼りして作った恣意的なサンプルですが、これ C#!?ってぐらいには強烈だと思います。
using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApplication1 { public class Form2 : Form { private TextBox textBox1 = new TextBox { Location = new Point( 12, 27 ), Multiline = true, Size = new Size( 268, 144 ), TabIndex = 0 }; private Label label1 = new Label { AutoSize = true, Location = new Point( 12, 9 ), Size = new Size( 31, 15 ), TabIndex = 1, Text = "メモ:" }; private Button button1 = new Button { Location = new Point( 109, 177 ), Size = new Size( 75, 23 ), TabIndex = 2, Text = "書き込む", UseVisualStyleBackColor = true }; public Form2() { ... } } }
ちょっと with 文っぽいですね。
オブジェクト初期化子の中でプロパティ/フィールドの名前がインテリセンスで出るけど、ゲッターしかないものも候補に挙がるのがいけてないトコ。
コンストラクタの中で使っても、オブジェクトごとに初期化がそれぞれブロックの中に入って、ごちゃごちゃしがちな初期化がスッキリしました。
惚れました…。