■ プロパティプロシージャ
- プロパティ構文が変更
- アクセスレベルは、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 があってもエラーになります。
Friend の効果が微妙に変化しました。
Visual Basic 6.0 では、同一プロジェクトから参照したいが、外部に公開したくないプロパティなどに Friend と付けました。 Visual Basic .NET では、同一アセンブリ内から参照したいが、外部に公開したくないプロパティなどに Friend と付けます。
この 2 つは、ほとんど同じように見えます。たしかに Visual Studio .NET を利用している場合は同じといってよいかもしれません。しかし、厳密には、Friend はアセンブリ内であれば参照できますので、たとえば、Visual Basic .NET の Friend プロパティを同一アセンブリの C# .NET から利用できる、ということになるのです。これが 「微妙」 な変化です。