2016-04-15 11 views
2

conststatic readonlyの違いを除いて、次の宣言に違いはありますか?プロパティと定数の相違を設定して取得する

public static int foo1 { get; } = 8; 

private static readonly int foo2 = 4; 
public static int Foo2 
{ 
    get { return foo2; } 
} 

private const int foo3 = 9; 
public static int Foo3 
{ 
    get { return foo3;} 
} 

foo1では何が起こりますか? foo2またはfoo3と同じですか?

私はこの文でconstまたはreadonlyにすることはできませんので、私は約foo1について尋ねるので、それは実際に定数ですか?

答えて

4

foo2と同じです。それは本当に問題ではないコードを呼び出すの観点から、今確かに

public static int Foo3 
{ 
    { get { return 9; } } 
} 

に同等のコードにコンパイルされFoo3 - - すべてのケースでfoo3との違いは、プロパティへのアクセスもfoo3相談しないということです常に同じ値を返すプロパティを公開しています。

あなたはconstなしFoo3と同等のものをしたい場合は、あなたが使用できます。それはジョンスキートだ

public static int Foo4 => 10; 
+1

OMG! – shinzou

+1

さて、私が落ち着いたので、C#の 'const'はアセンブリラベルのようですので、オブジェクトをインスタンス化するときに値を代入したい場合には使用できません。 'foo1'では構文がWYSIWYG(C#は他の言語に比べて本当に好きです)ではないことがちょっと変です。 – shinzou

+1

@kuhaku:私は本当にあなたのコメントに全く従っていないのではないかと心配しています...しかし 'foo1'は読み込み専用の自動実装プロパティで、初期値は9です。 。 –