プロパティ

これまで、privateメンバにアクセスできるメソッドとして"SetXXX"や"GetXXX"などのいわゆるsetter/getterというものを定義してきた・・・。
これらが何故存在するかというと、渡された値を設定時や取得時にチェックして問題があれば別の処理ができるところにある・・・。

C#には、setter/getter用のメソッドを定義しなくとも、設定時や取得時のチェック処理などを書けるプロパティという機能がある・・・。
変数に設定時処理と取得時処理の機能を持たせた感じだ・・・。

Class1には、

まずprivateのint型フィールドiを定義・・・。
これに対するpublicアクセス可能なプロパティIを準備・・・。

別の変数に代入や出力など、プロパティの値を参照するときに実行される取得時処理は、

このgetの中・・・。
単純にフィールドiをreturnで返す・・・。
つまりチェックせずに取得できるようにしている・・・。

一方、プロパティに値を代入するときに実行される設定時処理setは、

valueは、設定する値を指している・・・。
valueが負の値なら、エラーメッセージ"invalid!(i < 0)"を出力する・・・。
そうでなければ、フィールドiに値を代入する・・・。
つまり、チェックして負の値ならiにセットしないようになっている・・・。

同様に、privateなstringフィールドstrとpublicなstringプロパティStrは、

こちらも取得時のgetではチェックしないが、設定時のsetでは、空文字""だった場合はセットしないようになっている・・・。

MainClassで、

Class1オブジェクトc1のプロパティIに-5を代入した後、Iの値を出力・・・。

次は、c1.Iに10を代入した後、Iの値を出力・・・。

今度は、c1.Strに""を代入した後、Strの値を出力・・・。

最後に、c1.Strに"ABC"を代入した後、Strの値を出力・・・。

invalid!(i < 0)
c1.I = 0
c1.I = 10
invalid!(str == "")
c1.Str = -
c1.Str = ABC
続行するには何かキーを押してください . . .

最初にIに-5を代入した時に、エラー処理の"invalid!(i < 0)"が出力される・・・。
設定されていないので、c1.Iは当然0・・・。
次の10を代入の時には設定されるので、c1.Iは10になる・・・。
Strに""を代入した時も当然エラー処理の"invalid!(str == "")"が出力される・・・。
なので、c1.Strは"-"のまま・・・。
"ABC"を代入したときはセットされるので、c1.Strは"ABC"となる・・・。

Sample/MainClass.cs at master · bg1bgst333/Sample · GitHub
Sample/Class1.cs at master · bg1bgst333/Sample · GitHub