При var
компилятор выводит тип переменной на основе выражения в правой части оператора присваивания.
Другими словами,
var foo = new Love();
равно точно эквивалентно
Love foo = new Love();
Таким образом, все члены Love
будут доступны через foo
- тогда как если бы foo
был объявлен как тип object
, вы имели бы доступ только к GetHashCode()
, ToString()
, GetType()
и Equals()
.
С var
вы все еще используете статическую типизацию (в отличие от dynamic
в C # 4). Вы просто не указали явно тип переменной - вы позволяете компилятору решить ее за вас. Однако это должен быть тип, который компилятор может обработать. Например, все они недействительны:
// All invalid
var a = null;
var b = delegate() { Console.WriteLine("Hello"); };
var c = x => Console.WriteLine("lambda: " + x);
var d = MethodName; // Attempted method group conversion
В этих случаях у компилятора недостаточно информации, чтобы понять, какой тип вы имеете в виду.