■ デフォルトプロパティ

  • デフォルトプロパティは使えない

変更ポイント

Visual Basic 6.0 では、デフォルトプロパティを使うことができました。
たとえば、

                  
Text2.Text = Text1.Text

というコードは、デフォルトプロパティを省略して、

                  
Text2 = Text1

と、コーディングすることができました。Visual Basic .NET では 「デフォルトプロパティ」 は使わなくなりました (PlusOne 参照)。なお、例外については、関連・補足項目 を参照してください。

アップグレードウィザードによる変更点

アップグレードウィザードは、デフォルトプロパティを自動解決してくれます。
Visual Basic 6.0 の、

                  
Text2 = Text1' OKなパターン

というコードは、自動的に、

                  
Text2.Text = Text1.Text

にしてくれます。

また、Visual Basic 6.0 の、

                  
Dim obj As TextBox' これも OK なパターン
Set obj = Form1.Text1
MsgBox obj

というコードも、アップグレードウィザードが最後の行を、

                  
MsgBox obj.Text

としてくれるので、変換後に何もしなくても動作します。

ただし、この 「自動解決」 をしてくれない場合もあります。それは、Visual Basic 6.0 で書かれた以下のようなコードです。

                  
Dim obj As Object' これは×なパターン
Set obj = Form1.Text1
MsgBox obj

変数を Object 型として宣言し、実行時にクラスのインスタンスを代入するというこのパターンは、いわゆる実行時バインディングになっていて、オブジェクトが特定できません。そのためデフォルトプロパティの自動解決も行なえず、このままではエラーになってしまいます。そこで変換後、コードの手動変更が必要となります。

今、何をしておくべきか?

オブジェクト変数の実行時バインディングは避けましょう。

また、アップグレードウィザードを通さず、コピー&ペーストで Visual Basic 6.0 のコードを再利用しようと思うのであれば、デフォルトプロパティの利用も避けておくと無難です。

関連・補足項目

デフォルトプロパティ使用不可の例外

コレクションのようなパラメータ付きのデフォルトの使用は可能です。たとえば、

                  
rs("CompanyName").Value 'OK

は、Visual Basic 6.0 でも、Visual Basic .NET でも、

                  
rs.Fields("CompanyName").Value

の Fields コレクションを省略したものとして解釈されます。

Dd297711.plus(ja-jp,MSDN.10).gifなぜ、デフォルトプロパティがなくなったのでしょう?

たとえば、Visual Basic 6.0 では、オブジェクトの代入に Set ステートメントを利用しました。オブジェクト X と Y があったとき、

                    
Set Y = X

は、X (オブジェクト) を Y に代入することを意味します。そして、X のプロパティを代入したいときは、

                    
Y.プロパティ = X.プロパティ

と書くか、あるいは、このプロパティがデフォルトである場合は省略でき、

                    
Y = X

と記述することができます。

Visual Basic .NET では、オブジェクトの代入にも変数の代入にも Set ステートメントを使う必要がなくなりました。

                    
Y = X

と記述した際、(参照型であれば) X が参照しているオブジェクトへの参照が Y にセットされます。一方、「X のプロパティ」を「Y のプロパティ」代入したいときには、

                    
Y.プロパティ = X.プロパティ

と明示します。これにより、プログラムが明確になり、あいまいさがなくなるという利点があります。