スポンサーリンク
※サイト運営にサーバーは必須です※
 ~このサイトもエックスサーバー
を使用しています~
   
![]()
アクセサーの省略
プロパティは、getアクセサーとsetアクセサーの2つのアクセサーから通常は構成されます。
しかし、getアクセサーとsetアクセサーの両方を必ず用意しないというわけではありません。片方だけでも問題ありません。
getアクセサーのみであれば、読み取り専用プロパティとして振舞います。
setアクセサーのみであれば、書き込み専用プロパティとして振舞います。
ソースコード
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Property11 {     class Program     {         static void Main(string[] args)         {             MyClass mc = new MyClass();             mc.Num = 10;             mc.Plus();             Console.WriteLine(mc.Result);             mc.Num = 30;             mc.Plus();             Console.WriteLine(mc.Result);         }     }     class MyClass     {         //書き込み専用         private int _num;         public int Num { set { _num = value; } }         //読み取り専用         private int _result;//初期値はデフォルトで0         public int Result { get { return _result; } }         public void Plus() {             _result += _num;         }     } }  | 
					
実行結果
10
 40
mc.Resultに対して、mc.Numのように値を代入しようとするとエラーになります。
逆に、mc.Numに対して、mc.Resultのように値を読み出そうとするとエラーになります。
アクセシビリティの設定
getアクセサーとsetアクセサーに対して、それぞれ異なるアクセシビリティを設定することが可能です。
設定する際は以下の2点に注意してください(考えれば当たり前のことですが…)
・プロパティ自体のアクセシビリティより緩いアクセシビリティをアクセサーに指定できません
・getアクセサーとsetアクセサーの両方に対してアクセス修飾子を書くことはできません
 (もしも、両方に対してアクセス修飾子を書くことができたら、プロパティ自体のアクセス修飾子の存在意味がなくなってしまいます。片方のアクセサーにアクセス修飾子を付けたなら、もう片方のアクセサーは、自動的にプロパティ自体のアクセス修飾子が適用されます)
ソースコード
※setアクセサーに対して、アクセス修飾子privateを付けています。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Property12 {     class Program     {         static void Main(string[] args)         {             MyClass mc1 = new MyClass(10);             Console.WriteLine(mc1.Num);             MyClass mc2 = new MyClass(70);             Console.WriteLine(mc2.Num);         }     }     class MyClass     {         //フィールドとプロパティ         private int _num;         public int Num         {             get { return _num; }             private set { _num = value; }         }         //コンストラクター         public MyClass(int i) {             _num = i;         }     } }  | 
					
実行結果
10
 70
クラスのインスタンス化の際に、_numの値を設定します。
そして、一度インスタンス化したら、それ以降は_numの値の変更を許さないソースコードとなっています。
※コンストラクターはクラスをインスタンス化した際に、最初に処理されるメソッドのようなもの。
~Webサイトを自分で作ってみませんか?~
Webサイトを運営するにはサーバーが必須です。
 このサイトは、エックスサーバー 
のサーバーを使用しています。
 エックスサーバーは無料で10日間お試しができます。
