Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2014-10-01 05:34:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
А ларчик просто открывался:
Народ задается вопросом "Why class fields [in C#] cannot be var?"

(в смысле почему нельзя писать public var list = new List ()).

В ответах выдается масса умнософии типа:

because you can't use var out of a method. You can't declare a global var and since constructors are also methods, you don't get the error

В общем все выдумывают умные причины, почему это нельзя вставить в язык.
А ларчик открывается просто:

http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why-no-var-on-fields.aspx
You'd think this would be straightforward; we could just take the code that we use to determine the type of a local variable declaration and use it on a field. Unfortunately, it is not nearly that easy. Doing so would actually require a deep re-architecture of the compiler.

Короче - "ну не смогли мы это с ходу в транслятор вставить"

Кстати - очень частая ситуация, когда довольно случайные технические решения стараниями "умников" возводятся в философию :)


(Добавить комментарий)


[info]steinkrauz
2014-10-01 12:21 (ссылка)
У меня другой вопрос: а нахрена вообще делать var'овское поле? Какой в этом смысл?

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2014-10-01 13:23 (ссылка)
Тип два раза чтобы не писать.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2014-10-01 16:33 (ссылка)
Его два раза и не пишут, пишут один раз, а в конструктор его пишет текстовый редактор.

А если кто-то хочет редактировать, то даже польза от отображения два раза есть: смотришь на образец справа, пока редактируешь слева (ну и когда уверен, копируешь название вправо).

Согласен с ограничением применения (ну, на самом деле это, наверное, для примера было, а не как ограничение): когда тип справа не пишут, как "var a = f.CreateUnknown();", то вообще ерунда выходит, особенно если проверка типов во время исполнения (например, при использовании dynamic [которое, кстати, не только ради COM-ов], раз уж точка-нет; даже если нужны строки, то для правильного применения ToString() надо знать, у какого типа он вызывается: вызвать ToString() у enum-а или у числа — большая разница).

(Ответить) (Уровень выше)


[info]spqr
2014-10-01 13:13 (ссылка)
Кстати, такие вещи должны громко объявляться в документации.

(Ответить)