2015-09-23 8 views
1

Я люблю неявной типизации в C# для локальных переменных:неявной типизации для полей в C#

var Beer = new Malt.Beer(); 

вместо:

Malt.Beer Beer = new Malt.Beer(); 

Я не думаю, что это может быть распространено на полях это может?

public var Beer = new Malt.Beer(); 

вместо:

public Malt.Beer Beer = new Malt.Beer(); 

Это не компилируется, но интересно, что я только что получил синтаксис неправильно или неявные переменные (VAR) не могут быть использованы в этой области?

+0

Я не верю, что это возможно. 'var' работает только внутри методов. –

+0

var мой образ мышления был большой ошибкой Microsoft. Подумайте об этом, когда вы используете Var, компилятор должен преобразовать в правильный тип объекта. Если в вашем явном виде это не так. Также в больших программах, когда вы пытаетесь отлаживать, довольно часто вам приходится наведываться на переменную, чтобы узнать, что это такое, а не видеть сразу тип объекта. Вы также потеряете intellisense для переменных типа var. Вар должен использоваться только в сочетании с дженериками, где он может иметь разные типы. – bilpor

+2

@bilpor большая часть того, что вы только что сказали, совершенно неверна. Компилятору не нужно «конвертировать» что угодно - переменная всегда строго типизирована. 'int i = 10;' и 'var i = 10;' точно совпадают и приводят к тому же IL. Вы также не теряете Intellisense вообще, он по-прежнему работает отлично. –

ответ

1

Поля в C# не могут быть неявно напечатаны, извините. Я думаю, что это как-то связано с областью полей, а не с локальными переменными.

2

С MSDN programming guide для C#:

Remarks The following restrictions apply to implicitly-typed variable declarations: var can only be used when a local variable is declared and initialized in the same statement; the variable cannot be initialized to null, or to a method group or an anonymous function.

  • var cannot be used on fields at class scope.
  • Variables declared by using var cannot be used in the initialization expression. In other words, this expression is legal: int i = (i = 20); but this expression produces a compile-time error: var i = (i = 20);
  • Multiple implicitly-typed variables cannot be initialized in the same statement.
  • If a type named var is in scope, then the var keyword will resolve to that type name and will not be treated as part of an implicitly typed local variable declaration.