2016-04-15 9 views
2

Gibt es einen Unterschied zwischen den folgenden Deklarationen (außer dem Unterschied zwischen const und static readonly)?Unterschiede zwischen Eigenschaften und Konstanten einstellen und erhalten

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;} 
} 

Was passiert hinter den Kulissen mit foo1? ist es das gleiche wie foo2 oder foo3?

Ich frage nach foo1, weil ich es nicht ein const oder readonly mit dieser Syntax machen kann, also frage ich auch, ob es tatsächlich eine Konstante ist?

Antwort

4

Es ist das gleiche wie foo2. Der Unterschied mit foo3 ist, dass der Zugriff auf Eigenschaften nicht einmal konsultieren foo3 - Foo3 ist

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

Jetzt allerdings aus Sicht der Aufruf Code äquivalent kompiliert zu codieren es ist wirklich egal - in allen Fällen Sie legen eine Eigenschaft offen, die immer denselben Wert zurückgibt.

Wenn Sie das Äquivalent von Foo3 ohne const wollen, könnten Sie verwenden:

public static int Foo4 => 10; 
+1

OMG ist es Jon Skeet! – shinzou

+1

Okay, jetzt, nachdem ich mich beruhigt habe, sehe ich, dass "const" in C# wie ein Assembly-Label ist, so dass es nicht verwendet werden kann, wenn Sie ihm beim Instanziieren des Objekts einen Wert zuweisen möchten. Es ist ein wenig seltsam, dass mit 'foo1' die Syntax nicht WYSIWYG ist (was C# im Vergleich zu anderen Sprachen wirklich gefällt). – shinzou

+1

@kuhaku: Ich fürchte, ich habe Ihrem Kommentar überhaupt nicht gefolgt ... aber 'foo1' ist nur eine schreibgeschützte automatisch implementierte Eigenschaft mit einem Anfangswert von 9. Der Wert könnte jedoch im Konstruktor geändert werden . –

Verwandte Themen