Ключевое слово C # 'var' в сравнении с явно определенными переменными [дубликат]

Здесь много правильных ответов, но я хотел добавить это (для полноты):

Если вы в нижней части файла cpp реализации выполняете явное инстанцирование всех типов, которые будут использоваться шаблоном с, компоновщик сможет найти их как обычно.

Изменить: добавление примера явного создания экземпляра шаблона. Используется после того, как шаблон определен, и определены все функции-члены.

template class vector<int>;

Это создаст экземпляр (и, следовательно, сделает доступным для компоновщика) класс и все его функции-члены (только). Подобный синтаксис работает для функций шаблона, поэтому, если у вас есть перегрузки операторов, не являющихся членами, вам может понадобиться сделать то же самое для них.

Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.

30
задан JustinT 9 January 2009 в 19:50
поделиться

4 ответа

Так, там своего рода увеличение производительности, которое будет иметься от изменения Списка к var

No, но это не единственная допустимая причина рефакторинга. Что еще более важно, это удаляет дублирование и делает код короче без любой потери в ясности.

мне всегда преподавали, что явно определение переменной, вместо того, чтобы использовать динамическое, более оптимально.

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

Это также удаляет абсолютно бесполезное дублирование кода. Для простых типов это не могло бы быть очень. Но рассмотрите:

SomeNamespace.AndSomeVeryLongTypeName foo = new SomeNamespace.AndSomeVeryLongTypeName();

Очевидно, в этом случае, удваивающем имя, не является просто ненужным, но и на самом деле вредным.

61
ответ дан Konrad Rudolph 9 January 2009 в 19:50
поделиться

var ключевое слово на самом деле не объявляет переменную с динамическим типом. Переменная все еще со статическим контролем типов, она просто выводит тип из контекста.

хороший ярлык, когда у Вас есть долгое имя типа (универсальные имена типов могут быть долгими)

8
ответ дан Matt Brunell 9 January 2009 в 19:50
поделиться
  • 1
    user278859: если John ответил на Ваш вопрос, тогда принимают его ответ. Что проку, если Вы не принимаете даже корректные ответы? – Parth Bhatt 11 November 2010 в 08:26

Меньше ввода = больше производительности :)

1
ответ дан Martin Clarke 9 January 2009 в 19:50
поделиться

Нет. Они испускают точно тот же самый IL.

Это - просто вопрос стиля.

var обладает преимуществом, которое помогает Вам изменить тип возврата функций, не изменяя другие части исходного кода. Например, измените тип возврата с IEnumerable<T> до List<T>. Однако это могло бы помочь представить ошибки.

12
ответ дан Mehrdad Afshari 9 January 2009 в 19:50
поделиться
  • 1
    Это было им!!!! Я использовал только UITableViewCellStyleDefault. Я думаю, что использовал то, что было обеспечено, когда я создал класс, не думая о. Большое спасибо. John – user278859 27 February 2010 в 23:18
Другие вопросы по тегам:

Похожие вопросы: