2016-04-15 4 views
2

Есть ли разница между следующими декларациями (кроме разницы между const и static 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?

Я спрашиваю про foo1, потому что я не могу сделать это const или readonly с этим синтаксисом, поэтому я также спрашиваю, действительно ли это константа?

ответ

4

Это то же самое, что и foo2. Разница с foo3 в том, что доступ к свойству не будет даже проконсультироваться foo3 - Foo3 компилируется код эквивалентен

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

Теперь по общему признанию, с точки зрения вызывающего кода это действительно не имеет значения, - во всех случаях вы выставляете свойство, которое всегда будет возвращать одно и то же значение.

Если вы хотите эквивалент Foo3 без const, вы можете использовать:

public static int Foo4 => 10; 
+1

OMG это Джон тарелочкам! – shinzou

+1

Теперь, когда я успокоился, я вижу, что 'const' в C# подобен метке сборки, поэтому его нельзя использовать, если вы хотите присвоить ему значение при создании объекта. Немного странно, что с 'foo1' синтаксис не WYSIWYG (какой C# действительно нравится по сравнению с другими языками). – shinzou

+1

@kuhaku: Я боюсь, что я действительно не выполнил ваш комментарий вообще ... но 'foo1' - это просто автоматически реализованное свойство только для чтения с начальным значением 9. Значение может быть изменено в конструкторе, хотя , –