前提・実現したいこと
・質問1。
readonly修飾子を用いたフィールドと、getterのみで書いたプロパティは同等でしょうか?
どちらもコンストラクタと変数初期化子では値の代入が可能で、
それ以外は値の代入が不可能で読み取り専用となるという認識で合っていますか?
・質問2。
C#
1 public string myValue1 { get; } = "value1"; 2 public string myValue2 { get; }
上記と下記のコードは同等でしょうか?
C#
1 public string myValue1 { get; } = "value1"; 2 public string myValue2 { get; }
・質問3。
C#
1 class Sample1 2 { 3 public string myValue1 { get; } = "value1"; 4 public string myValue2 { get; } 5 public Sample1(string value){ 6 myValue2 = value; 7 } 8 }
上記と下記のクラスは同等でしょうか?
C#
1 class Sample2 2 { 3 public readonly string myValue1 = "value1"; 4 public readonly string myValue2; 5 public Sample2(string value){ 6 myValue2 = value; 7 } 8 }
試したこと
下記のように試したところ、結果はコメントの通りとなったので、
一見すると、質問1の認識は合っていて、質問2と質問3もそれぞれ同等と思えるような結果になりましたが、
考慮漏れや勘違いしている部分があるかもしれないと思い、質問させていただきました。
C#
1using System; 2 3namespace SampleProject 4{ 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 // Console.WriteLine("Hello World!"); 10 11 Sample1 s1 = new Sample1("value2"); 12 Console.WriteLine(s1.myValue1); // value1 13 Console.WriteLine(s1.myValue2); // value2 14 15 // s1.myValue1 = "value3"; // 読み取り専用であるためエラー 16 // s1.myValue2 = "value4"; // 読み取り専用であるためエラー 17 18 Sample2 s2 = new Sample2("value2"); 19 Console.WriteLine(s2.myValue1); // value1 20 Console.WriteLine(s2.myValue2); // value2 21 22 // s2.myValue1 = "value3"; // 読み取り専用であるためエラー 23 // s2.myValue2 = "value4"; // 読み取り専用であるためエラー 24 } 25 } 26 27 class Sample1 28 { 29 public string myValue1 { get; } = "value1"; 30 public string myValue2 { get; } 31 public Sample1(string value){ 32 myValue2 = value; 33 } 34 } 35 36 class Sample2 37 { 38 public readonly string myValue1 = "value1"; 39 public readonly string myValue2; 40 public Sample2(string value){ 41 myValue2 = value; 42 } 43 } 44 45}
プロパティとフィールドは違います。
回答3件
あなたの回答
tips
プレビュー