2008年12月24日水曜日

.NET Option Infer ステートメント

Option Infer ステートメント
変数の宣言に対するローカル型の推論の使用を有効にします。
VS2008で新たに追加されたオプションです。

Option Infe On
変数の宣言に対するローカル型の推論の使用を有効にします。

Option Infer Off
変数の宣言に対するローカル型の推論の使用を無効にします。

デフォルトはOnです。


Option Infer Onでは以下のようにAs句を書かなくてもコンパイルエラーになりません。
Public Shared Sub Main()

Dim str = "123"
str.Substring(0, str.Length)

Dim lst = New List(Of Integer)
lst.Add(1)

End Sub


またOption Strict Offでも上記のコードはコンパイルエラーになりません。
Option Strict OffではAs句を省略できるためです。

では何が違うかというと
Option Strict Off (Option Infer Off)では変数strも変数lstもObject型になります。
また「str.」と入力してもインテリセンスにはObject型のメンバしか表示されません。
strのSubstringメソッドや、lstのAddメソッドは遅延バインディングにより、実行時に変数の中身がチェックされ、メソッドが存在すれば実行されます。

これに対し
Option Infer On (Option Strict On)では、変数strはコンパイル時にString型と推論されます。変数lstはList(Of Integer)型と推論されます。
Option Infer Onでは、変数宣言の右辺の初期化式からコンパイラが変数の型を推論して決定されるので、「str.」と入力すればインテリセンスにはString型のメンバが表示されます。
右辺の初期化式を書かないとコンパイルエラーになります。


Option Strict Off、Option Infer Onでは
右辺の初期化式があれば型推論が行われstr変数はString型になります。
Public Shared Sub Main()
Dim str = "123"
str.Substring(0, str.Length)
End Sub

右辺の初期化式ががなければ型推論が行わずstr変数はObject型になります。
Option Strict Offなのでコンパイルエラーにはなりません。
Public Shared Sub Main()
Dim str 
str = "123"
str.Substring(0, str.Length)
End Sub

0 件のコメント: