[VB2010]自動実装プロパティ その2

けろ-みおさんより

[VB2010]自動実装プロパティ の記事に

>仕組み上、本当に等価であるのか?ILDASMの結果を掲載してもらえると嬉しいです。

というコメントををいただいたので調べてみました。

まず class1 と class2 というクラスを準備し、

class1にはこれまで通りの書き方でプロパティを作成

class2には自動実装プロパティを作成

コードは下記の通りです。

これを ILDASM で比較表示してみました。

上記の結果から、これまでの「書き方と自動実装プロパティは等価である」と言うことを証明できました。


ついでなので VS2010 CTP の C# の方も見てみました。

VB.NETと同じように、class1にはこれまで通りの書き方で、class2には自動実装プロパティで書きました。

ちなみに C#の方はたしか 3.0 のバージョンから自動実装プロパティが使用できるようになったと記憶しています。

で ILDASM の結果は下記の通りです。

class2の方では裏で<employee>k__BackingField という private stringが作成されていることがわかります。

これはMSDNの自動実装するプロパティ (C# プログラミング ガイド) で バッキングフィールド という名称で説明がされています。

ということで、C#の方は厳密には等価ではないことがわかります。

[VB2010]行継続文字

行継続文字は行連結文字と呼ばれることもあります。(このページでは行継続文字と表記します)

コードエディタでコードを記述する際、ステートメントが長くなると横スクロールをする必要がでてきます。

ステートメントが長いことは問題ないのですが、読みにくいため複数行に分けて記述することを検討する必要があります。

VB2008までは、行を分割する際に アンダースコア(_)を使用していました。

たとえばメッセージボックスのステートメントは下記のように行継続文字で複数行に分けて書くことが可能です。

MessageBox.Show("こんにちは", _
  "挨拶表示", _
  MessageBoxButtons.OK, _
  MessageBoxIcon.Information)

コードを見ていただければわかりますが、1つのステートメントを4行に分割するには、行継続文字が3つ必要です。


VB2010における行継続文字

VB2010では、行継続文字を省略することが可能となりました。

これにより以前のように行分割位置に毎回アンダースコアを記述する必要がなくなりました。

MessageBox.Show("こんにちは",
  "挨拶表示",
  MessageBoxButtons.OK,
  MessageBoxIcon.Information)

この機能は多くのVBユーザーが待ち望んでいたのではないでしょうか?

ちなみに、これまでどおり行継続文字を使用しての行分割も可能です。