"Так как var является выводом явного или анонимного типа, будет ли его память выделена в том же месте, где соответствующий ей тип будет или будет универсально создан в куче и получит доступ, как если бы это был объект"
Важным в var является то, что компилятор изменяет оператор var на фактический тип во время компиляции, поэтому:
var number = 1;
Изменится на:
System.Int32 number = 1;
... компилятором.И как таковые места памяти для хранения этих типов ничем не отличаются.вар по сути синтаксический сахар.Таким образом, локальные объявления методов типов значений сохраняются в стеке, а ссылочные указатели сохраняются в стеке вместе со ссылочными объектами в куче.
Как только вы объявили переменную как var, потому что это транслируетсяв его полный тип компилятором, вы не можете динамически изменить тип:
var i = 5;
i = "Steve";
... недопустим, потому что он уже был объявлен как Int32.
Анонимные типыследуйте аналогичному поведению, когда тип создается компилятором во время компиляции.
"Наконец, когда-нибудь возникает ситуация, когда вы можете подумать, где вы можете знать тип во время разработки, но было бы разумнов любом случае использовать var? "
Лично я следую простому шаблону:
Для примитивов я всегда ставлю тип:
int i = 5;
string name = "Matt";
Для сложных типов я в основном делаюthis:
var instance = new MyComplexTypeInstance();
Для результатов LINQ я придерживаюсь var:
var result = from i in something select i;
Для методов, если метод описывает возвращаемый тип, я буду использовать var.
var instance = GetInstance();
Принимая во внимание, что более сложные имена методов я бы назвал реальным типом:
Result result = DoSomethingWeirdAndWonderful();
Каждый разработчик найдет то, что ему удобно, выбор за вами.Поскольку var - это действительно только вещь времени разработки, ее синтаксический сахар.