■ プロパティプロシージャ

  • プロパティ構文が変更
  • アクセスレベルは、Set と Get でそろえる
  • デフォルトプロパティはコード中で指定 (パラメータ付きのみ)
  • Friend は微妙に変更

変更ポイント

プロパティ構文が変更になりました。 Visual Basic .NET では、

                  
Public Property MyProp1() As Object
    Get
        ' プロパティを取得する処理
    End Get
    Set
        ' プロパティを設定する処理
    End Set
End Property

と、プロシージャを一体化して書きます。もちろん、取得専用または設定専用のプロパティ (関連・補足項目 参照) を作成することもできます。 Visual Basic 6.0 では、プロパティのデータ型によって Set または Let を使い分けていましたが、すべて Set になります。

このコードの書き方からも予想がつくと思いますが、Set と Get のアクセスレベルをそろえる必要があります。これは、意味的にも正しいことですので、異なるアクセスレベルに設定できないことは、問題ではないでしょう。

また、Visual Basic 6.0 でのデフォルトプロパティの設定は、「ツールの属性」 メニューからプロパティを 「既定値」 に設定することで行なっていました。そのため、コードを見ただけでは、デフォルトプロパティがどれであるかがわかりませんでした。 Visual Basic .NET では、コードの中に Default キーワードを挿入することで設定できるようになりました。

                  
                    Default Public Property MyProp22(ByVal index As Integer) As Object
    Get
        ' プロパティを取得する処理
    End Get
    Set
        ' プロパティを設定する処理
    End Set
End Property

ただし、Visual Basic .NET ではパラメータのないプロパティをデフォルトプロパティに設定することはできないことを忘れないでください。

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

できる限りアップグレードしてくれます。たとえば、

                  
Private mvarMyProp1 As Variant

Private Public Property Let MyProp1(ByVal vData As Variant)
    ' プロパティを設定する処理
End Property

Public Private Property Get MyProp1() As Variant
    ' プロパティを取得する処理
End Property

という Visual Basic 6.0 のコードは、

                  
                    Private mvarMyProp1 As Object

Public Property MyProp1() As Object
    Get
        ' プロパティを取得する処理
    End Get
    Set(ByVal Value As Object)
        ' プロパティを設定する処理
    End Set
End Property

とアップグレードされます。

次のような変更をチェックしてみて下さい。

  • Set と Get の一体化
  • Let を Set に変更
  • アクセス指定子が異なる場合、Public に統一

デフォルトプロパティの指定は、手動で追加して下さい。

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

この変更に備えて、特にしておくことはありません。

関連・補足項目

取得専用のプロパティには ReadOnly キーワード、設定専用のプロパティには WriteOnly キーワードを指定します。

Set…End Set を記述しないときに ReadOnly キーワードを忘れるとエラーになります。また、ReadOnly キーワードがあるときに、Set…End Set があってもエラーになります。

Get…End Get を記述しないときに WriteOnly キーワードを忘れるとエラーになります。また、WriteOnly キーワードがあるときに、Get…End Get があってもエラーになります。

Dd297704.plus(ja-jp,MSDN.10).gif

Friend の効果が微妙に変化しました。

Visual Basic 6.0 では、同一プロジェクトから参照したいが、外部に公開したくないプロパティなどに Friend と付けました。 Visual Basic .NET では、同一アセンブリ内から参照したいが、外部に公開したくないプロパティなどに Friend と付けます。

この 2 つは、ほとんど同じように見えます。たしかに Visual Studio .NET を利用している場合は同じといってよいかもしれません。しかし、厳密には、Friend はアセンブリ内であれば参照できますので、たとえば、Visual Basic .NET の Friend プロパティを同一アセンブリの C# .NET から利用できる、ということになるのです。これが 「微妙」 な変化です。