# 型推論についてはそんなに確固たる信念が自分になかったというか、そんな感じですwというわけで、次の新機能にそそくさとw
Visual Basic 2008では オブジェクト初期化子 という機能が新しく追加されました。
MSDN:オブジェクト初期化子 : 名前付きの型と匿名型※ 匿名型については別のエントリで書きます。
オブジェクト初期化子は、あるオブジェクトのインスタンスの初期化の際に、そのオブジェクトが持つプロパティを指定できるようになる機能です。
匿名型については後で書くので、今回は名前付きの型についてのサンプルです。まずは一番シンプルなもの。
Imports System.Windows.Forms
Public Class Program
Public Sub Main()
Dim f As New Form With {.Text = "ふぉ~む。", .Visible = True}
End Sub
End Class
New キーワードで初期化した後にWith キーワードと {}で各プロパティを初期化します。各プロパティには「.」+ プロパティ名でアクセスできます。なお、実際には初期化子リストで指定されている順に指定したプロパティが初期化されます。上のコードは With ... End With ステートメントを使用した以下のコードと同じです。
Imports System.Windows.Forms
Public Class Program
Public Sub Main()
Dim f As New Form
With f
.Text = "ふぉ~む。"
.Visible = True
End With
End Sub
End Class
次のサンプルでは、ある一つのプロパティを別のプロパティの値を使用して初期化します。(初期化の内容はつっこまないでw)
Imports System.Windows.Forms
Public Class Program
Public Sub Main()
Dim f As New Form With {.Text = "ふぉ~む。", .Visible = .IsHandleCreated}
End Sub
End Class
さて、これってコンストラクタで引数とって初期化すればいいんじゃね?とか、一瞬だけ思ったわけですが、この初期化子が実行されている時点では New キーワードによるインスタンスの初期化はすでに行われているということがコンストラクタ内の初期化との大きな違いです。なお、既定のコンストラクタ以外の引数を持つコンストラクタの場合でも使用できます。