VB.NET / ReadOnly Property

Propertyとは

VB.NETでのプロパティの書き方は以下のようになります。

①省略しない書き方

Private Weather As String = "晴"
Public Property _Weather As String
 Get
  Return Weather
 End Get
 Set(value As String)
  Weather = value
 End Set
End Property

②省略形

Private Property Weather As String = "晴"

Propertyを宣言することのメリットとしては
①メンバへのアクセスを集約することにより、制限をかけることが可能になる
②メンバへのアクセスのみではなく、異なる処理をすることが可能
などのことがあげれます。

①メンバへのアクセスを集約することにより、制限をかけることが可能になる

Private Weather As String = "晴"
Public Property _Weather As String
Get
Return Weather
End Get
Set(value As String)

If (value.Equals("晴") OrElse
 value.Equals("雨") OrElse
  value.Equals("曇")) Then

Weather = value

End If

End Set
End Property

上記のコードでは天気(Weather)を表す変数のPropertyを宣言しています。
天気を表す変数なので、天気以外の値を入れられるとその他の処理に影響が出てしまいます。
なのでSetterでは「晴」「雨」「曇」以外は代入できないように制限しています。
このようにPropertyで制限することで天気(Weather)を表す変数に不正な値が代入されることを防ぐことができます。
※本来ならこのようなコードは列挙体にすべきです。

②メンバへのアクセスのみではなく、異なる処理をすることが可能
Propertyはメンバに値を挿入または値を取得するためだけに使用するのではなく、付随して処理を記述することも 可能です。

Private Weather As String = "晴"
Public Property _Weather As String
Get
Return Weather
End Get
Set(value As String)

            Weather = value

            If (value.Equals("晴")) Then
                ' -- 晴れの場合、メッセージを表示
                SunnyMethod()
            End If

        End Set
End Property


    Private Sub SunnyMethod()
        MessageBox.Show("今日は晴れです。")
    End Sub

上記のコードではWeatherに”晴”が代入された場合に、メソッドの呼び出しを行っています。

ReadOnly Propertyとは

Propertyとはで挙げた
①省略しない書き方
②省略形
の2つの違いはコードを「自動実装」に任せるかどうかになります。

自動実装とはProperty宣言をしたメンバに対してコンパイル時に自動で
Get/Setを記述してくれるVisual Studioの機能です。

そして、自動実装で記述した②の省略形にはReadOnlyキーワードを付与できます。
書き方は以下のようになります。

Private ReadOnly Property Weather As String = String.Empty

上記の変数[Weather]には宣言しているクラス以外のクラスからアクセスすることができません。
そして、宣言しているクラス内でアクセスする際は通常のように

Weather = String.Empty

とするとエラーになります。
「自動実装」で作成したプロパティにアクセスするにはメンバ名の前に「(アンダーバー)」をつける必要があります。 これはコンパイル時に「自動実装」処理が 「(アンダーバー)」+ メンバ名 でGet/Setを作成するためです。

_Weather = String.Empty

上記のようにするとエラーもなくなり、アクセスできるようになります。

ReadOnly Property は決して「参照のみで書き込みできないメンバ」ではなく、
宣言クラス以外のクラスからのアクセスを防ぐものです。
※単に ReadOnly変数は「参照のみで書き込みできないメンバ」になります。

ご清覧ありがとうございました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. coubaco より:

    はじめまして。
    次回の更新楽しみにしています。