佐々木屋

技術的なことから趣味まで色々書きます

クラスのプロパティ③(getter/setter制御)

外部からの制御用として読み取り、書き込みの設定制御が可能です。
C#VB.NETで少し記法が異なりますので注意しましょう。

読み取り専用

//getterのみを記述すれば読み取り専用となる

//自動実装プロパティの場合
public string Hoge1 { get; }

//通常記述の場合
private string _hoge;
public string Hoge2 {
    get {
        return _hoge;
    }
}
'ReadOnlyキーワードを記述すると読み取り専用となる

'自動実装プロパティの場合
Public ReadOnly Property Hoge1() As String

'通常記述の場合
Private _hoge As String
Public ReadOnly Property Hoge2() As String
    Get
        Return _hoge
    End Get
End Property


書き込み専用

//setterのみを記述すれば読み取り専用となる

//自動実装プロパティの場合はエラーになる
public string Hoge1 { set; } //←エラー

//通常記述の場合
private string _hoge;
public string Hoge2 {
    set {
        _hoge = value;
    }
}
'WriteOnlyキーワードを記述すると読み取り専用となる

'自動実装プロパティの場合はエラーになる
Public WriteOnly Property Hoge1() As String '←エラー

'通常記述の場合
Private _hoge As String
Public WriteOnly Property Hoge2() As String
    Set(ByVal value As String)
        _hoge = value
    End Set
End Property


値の設定(自動実装プロパティのgetterのみの場合)

自動実装プロパティを使用した読み取り専用プロパティに対する値の設定は、コンストラクからしか設定できません。

class Class1
    public string Hoge { get; }

    //コンストラクタより値を設定
    public Class1() {
        Hoge = "piyo";
    }

    //以下はエラーとなる
    public void Piyo() {
        Hoge = "piyo"; 
    }
}
Class Class1
    Public ReadOnly Property Hoge() As String

    'コンストラクタより値を設定
    Public Sub New()
        Hoge = "piyo"
    End Sub

    '以下はエラーとなる
    Public Sub Piyo()
        Hoge = "piyo"
    End Sub
End Class