Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> var - просто удобство? 
V
    Опции темы
DenWPF
Дата 16.4.2011, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Я уже давно вижу во многих примера используется ключевое слово var.
По сути я ещё не видел отличия от того что напишу просто тип или var.

Что можете рассказать об этом типе\ключе?
PM MAIL   Вверх
Void
Дата 16.4.2011, 21:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 2
Всего: 173



Без var, например, нельзя объявить переменную анонимного типа.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
nikitao
Дата 16.4.2011, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



Это не тип , а ключевое слово , означающее поредение типа переменной автоматически на этапе компиляции

http://msdn.microsoft.com/ru-ru/library/bb383973.aspx

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

Насколько мне известно Microsoft не рекомендует использовать var кроме как для указанной выше цели.
Тем не менее даже вокруг этого возникли споры и разногласия. 
R# к примеру предлагает везде где есть возможность его использовать

Классическим примером является сравнение 2 строк кода :
Код

ЭтосуперпуперТип р=new ЭтосуперпуперТип();

var р=new ЭтосуперпуперТип();


Понятно , что в данном случае в первой строчке кода происходит дублирование информации о типе.
У использования ключевого слово var есть и другие преимущества.

Лично я очень осторожно отношусь к этому ключевому слову и стараюсь его не использовать. Просто исходя из принципа : от добра добра не ищут.


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
DenWPF
Дата 16.4.2011, 22:29 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



хотелось бы услышать ещё мнения.

но по сути в IL код компилятор создат одинаковые команды из вашего пример?
PM MAIL   Вверх
wester
Дата 17.4.2011, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



недавняя тема 
http://forum.vingrad.ru/topic-320653.html

PM MAIL   Вверх
DenWPF
Дата 17.4.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



ч.т.д тут нужно собрать факты, обговорить с командой, и делать как думает команда.
PM MAIL   Вверх
Voyager
Дата 17.4.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Это просто синтаксический сахар. Для себя я выявил правило - как можно реже его употреблять.
PM   Вверх
wester
Дата 17.4.2011, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



Код

var gr = this.CreateGraphics();
            var brushRed = Brushes.Red;
            var brushBlack = Brushes.Black;
            var brushSystem = new SolidBrush(this.BackColor); 

            var lastRed = new Point(this.gameWidth, this.gameHeight);
            var lastBlack = new Point(UnitSize + Offset, UnitSize + Offset);

кусок из моего проекта - количество шума уменьшается очень сильно при использовании var
PM MAIL   Вверх
DenWPF
Дата 17.4.2011, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Цитата

var gr = this.CreateGraphics();


ну вот эта часть мне кажется не удачная. 
PM MAIL   Вверх
DenWPF
Дата 17.4.2011, 22:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



да и вот сейчас подумал к примеру 
лучше выглядит 
Код

for (int i = 0; i < m_array.Count; i++)

чем
Код

for (var i = 0; i < m_array.Count; i++)


и вот ещё, как по мне не очень то и понятно выглядит

Код

var tempImagePath = m_pathDataPlatformList[rand.Next(0, 2)].m_pathImage;


Это сообщение отредактировал(а) DenWPF - 17.4.2011, 23:00
PM MAIL   Вверх
mimik
Дата 17.4.2011, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Цитата(DenWPF @  17.4.2011,  22:57 Найти цитируемый пост)
и вот ещё, как по мне не очень то и понятно выглядит
Код

var tempImagePath = m_pathDataPlatformList[rand.Next(0, 2)].m_pathImage;


т.е. а это понятно, да
Код

m_pathDataPlatformList[rand.Next(0, 2)].m_pathImage

это же тоже самое что и
Код

var temp = m_pathDataPlatformList[rand.Next(0, 2)];
temp.m_pathImage

тип ведь не конкретизируется smile 
PM   Вверх
DenWPF
Дата 18.4.2011, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



 smile не понял...
PM MAIL   Вверх
wester
Дата 18.4.2011, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



DenWPF, 
Цитата

ну вот эта часть мне кажется не удачная.  

тут мне было лень писать нормальное имя переменной. Халтура, что уж тут сказать)

mimik, 
Цитата

m_pathDataPlatformList[rand.Next(0, 2)].m_pathImage

тут дело в том, что при дебаге такое сокращение может получить кучу головной боли для программиста. Самое банальное - нет такого элемента с указанным индексом. и здесь появится ошибка в рантайме. Этот фрагмент вообще стоит переписать. 
PM MAIL   Вверх
DenWPF
Дата 18.4.2011, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



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


Код

var temp = m_pathDataPlatformList[rand.Next(0, 2)];
temp.m_pathImage


будет как одна команда. т.е полностью IL код будет одинаковый?

Код

var temp = m_pathDataPlatformList[rand.Next(0, 2)].m_pathImage

PM MAIL   Вверх
Экскалупатор
Дата 18.4.2011, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(DenWPF @  18.4.2011,  06:51 Найти цитируемый пост)

var temp = m_pathDataPlatformList[rand.Next(0, 2)];
temp.m_pathImage


будет как одна команда. т.е полностью IL код будет одинаковый?


конечно нет, я так понимаю что в temp.m_pathImage идет обращение к свойству объекта? которое что то возвращает? и куда оно возвращает?

Код

var temp = m_pathDataPlatformList[rand.Next(0, 2)].m_pathImage

в этом случае переменная temp станет того же типа что и свойство.

но для меня остается загадкой какого типа эта переменная будет... я бы тут написал тип переменной.

Это сообщение отредактировал(а) Экскалупатор - 18.4.2011, 09:11
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.