既定のプロパティの変更点 (Visual Basic 6.0 ユーザー向け)

更新 : 2007 年 11 月

Visual Basic 2008 では、簡略化と読みやすさの向上を実現するために、既定のプロパティ サポートが更新されています。

Visual Basic 6.0

Visual Basic 6.0 では、既定のプロパティはオブジェクトでサポートされます。たとえば、Label コントロールでは、Caption が既定のプロパティとなり、次の例の 2 つの代入は等価になります。

Dim lbl As Label 
lbl = "Important" 
lbl.Caption = "Important" 

既定のプロパティを使用すると、Visual Basic コードをある程度簡略に記述できますが、いくつかの欠点もあります。

  • コードが読みにくくなる場合があります。Label コントロールに慣れていない場合、前の例の 1 つ目の代入で、文字列 "Important" が変数 lbl に直接格納されているのか、既定のプロパティに格納されているのかを判断できません。

  • コードで使用するオブジェクトに既定のプロパティがあるかどうか、またどれが既定のプロパティであるかが、わかりにくい場合もあります。

  • Visual Basic 言語では、既定のプロパティがあるため、Set ステートメントが必要になります。次の例は、既定のプロパティではなく、オブジェクト参照の代入を示すために Set が必要であることを示しています。

    Dim lbl1 As Label, lbl2 As Label 
    lbl1 = "Saving" ' Assign a value to lbl1's Caption property. 
    lbl2 = lbl1       ' Replace lbl2's Caption property with lbl1's. 
    Set lbl2 = lbl1   ' Replace lbl2 with an object reference to lbl1. 
    

Visual Basic 2008

Visual Basic 2008 では、引数を受け取らない既定のプロパティはサポートされません。この構文変更により、Let ステートメントおよび Set ステートメントで代入の内容を指定する必要はなく、これらのステートメントは代入のステートメントで使用されません。Label コントロールの Caption プロパティは、Text プロパティに置き換えられています。前の例は、次のように書き換えることができます。

Dim L1, L2 As New Label   ' Both become type Label
                          ' in the new version of Visual Basic.
L1.Text = "Saving"        ' Assign Text property. 
L2.Text = L1.Text         ' Copy Text property. 
L2 = L1                   ' Copy object reference.

Let は、構文では使用されませんが、Visual Basic 2008 でも予約語です。これにより、以前の意味との混同が避けられます。Visual Basic 2008 では、プロパティの値を設定するプロパティ プロシージャに Set ステートメントが使用されます。

パラメータ化したプロパティ

引数を受け取る既定のプロパティはあいまいではなく、Visual Basic 2008 でサポートされています。多くの場合、既定のプロパティはコレクション クラスで使用されます。たとえば、System.Windows.Forms 名前空間では、Form クラスは以下の階層をサポートします。

Form オブジェクト

   Controls プロパティ (このフォームの Control.ControlCollection オブジェクトを返します)

      Control.ControlCollection オブジェクト (既定のプロパティは Item です)

         Item プロパティ (コレクション内の 1 つの項目の Control オブジェクトを返します)

            Control オブジェクト

Controls プロパティは、Control.ControlCollection オブジェクトを返します。Item プロパティは、Control オブジェクトを返します。次の例は、Visual Basic 2008 の既定のプロパティの、有効な例と無効な例を示しています。

Dim F As New Form   ' Assume F has been created and initialized.
F.Controls.Item(0).Text = "Stop"  ' Valid -- no default properties used. 
F.Controls(0).Text = "Stop"  ' Valid -- Item is parameterized. 
'F(0).Text = "Stop"  ' INVALID -- Form does not have a default property. 
'F.Controls(0) = "Stop"  ' INVALID -- No default property on Control. 

既定のプロパティの宣言

Visual Basic 2008 では、宣言の最初に Default キーワードを指定することで、プロパティを既定のプロパティとして指定します。プロパティ名をオーバーロードする場合は、オーバーロード宣言ごとに Default を指定する必要があります。既定のプロパティは、Shared または Private では宣言できません。

参照

概念

プロパティ プロシージャの変更点 (Visual Basic 6.0 ユーザー向け)

プログラミング要素のサポートに関する変更の概要

参照

Text

Label

Set ステートメント (Visual Basic)

System.Windows.Forms

Form

Control.ControlCollection

Control

Default (Visual Basic)