Новинки Visual Studio 2008 и .NET


14 0

В Visual Studio 2008 появилось много интересного, в том числе и поддержка .NET 3.5. Сегодня я xотел бы выделить то, что понравилось мне больше всего.

Первое, что хочеться отметить - оператор var. С его помощью можно создавать переменные без явного указания типа данных. Некоторые программисты, услышав такое заявление, думают что Майкрософт добавила дыру, ибо все знают, что все мире должно быть типизировано, иначе неизвестно сколько нужно выделять памяти. Но .NET достаточно умный, чтобы определить ти данных по контексту инициализации.

Давайте посмотрим на несколько примеров чтобы убедиться в красоте подобного подхода:

 var anumber = 10;
 var astring = "The string";
 var anarray[] = {10, 20, 30};

В первой строке создается целочисленная переменная. Вторая строка создаст строковую переменную. Последняя строка создаст для нас массив из чисел. Компилятор может определить тип только во время инициализации. Если в последствии оказалось, что нужно более короткое или длинное число, то спасет приведение типов или м можно явно указать тип во время инициализации

Оператор var хорош, но я не стал бы злоупотреблять им. Нет, не из-за возможных ошибок, тут .NET вроде не тупит. Из-за наглядности. Чтобы определить тип переменной, приходиться смотреть на код инициализации. Да, положение спасает венгерская нотация, но ведь ее используют не все.

Объявление свойств класса в .NET было занудным и требовало множества усилий. Это вам не Delphi с ее простым оператором property. Вот так мы объявляли свойства раньше:

int propertyVariable;
public int PropertyName
{
 get { return propertyVariable; }
 set { propertyVariable = value; } 
}

Писать все это в одну строку напряжесто и уродливо, а в несколько не лучше. Как же я рыдал и настальгировал над простым и красивым методом объявления свойств в Delphi. Но теперь я смахнул слезу рукавом и наслаждаюсь.

Если ты еще не видел, то встречай, новый метод объявления свойств:

 public int PropertyName { get; set; }

Теперь не нужно заводить лишнюю переменную и описывать к ней обращение. Все происходит напрямую с именем свойства. А переменная скрывается.

За такой удобный и короткий метод объявления свойств, хочеться отвесить разработчикам VS низкий паклон с поцелуем в носик ботинка. Конечно, ты можешь использовать и старый метод, если для чтения или записи значения нужно не просто прочитать переменную, а выполнить еще какие-то действия.

Третью особенность, которая мне понравилась я опишу чуть позже.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

grg

18 Aпреля 2008

Я не совсем понял все прелести оператора var. Показанный пример ее совсем не раскрывает, т.к. в нем в том виде как он есть, лучше использовать точное описание типов. Сначала я подумал что это нечто вроде вариантов в Delphi, но по продолжению заметки получается вроде как нет, раз в тип в последствии не может меняться. Объясните подробнее.


Romul

18 Aпреля 2008

>встречай, новый метод объявления переменных

Это всё-таки метод объвления свойств!

P.S. Horr, для полноты картины не хватает описания нового метода инициализации классов и структур:

var z = new Complex {
  Re = 5,
  Im = 7
}

P.P.S. Да, кстати, некоторые новшества .NET 3.x описаны в моей статье
http://vr-online.ru/review.php?id=130
в том числе там есть и про вывод типов (var)


Михаил Фленов

18 Aпреля 2008

Опечатался, исправил.


pollitra

18 Aпреля 2008

Такой вопрос: зачем нужен этот способ объявления свойств? Ведь вполне можно обойтись public-переменной. А если нужно не только прочитать/записать, то все равно придется объявлять переменную.


Romul

18 Aпреля 2008

pollitra, ты что??? Это нарушит всю инкапсуляцию, класс с публичными переменными - это уже не класс, а в лучшем случае структура...
К тому же на этапе проектирования и первичной версии не всегда ясно понадобятся ли специфичные св-ва доступа, если не предусмотреть механизма свойств, то в тот момент, когда эти специфичные св-ва доступа понадобятся, весь клиентский код(который использует данный класс) полетит к чертям собачьим, а если ты к этому моменту уже выложил в публичный доступ свой класс, то это будет полная труба...
P.S. Этого конечно можно частично избежать называя публичную переменную с большой буквы, но то что это ломает весь ООП-подход на корню - это факт... И всё это ради того что тебе лень набрать { get; set; } ?


Кстати данный синтаксис позволяет гибко управлять доступом к св-ву, например:

public int PropertyName { get; private set; }
И, вуаля, получилось св-во только для чтения из клиентского кода и для чтения/записи из кода класса...


Михаил Фленов

18 Aпреля 2008

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


Атлас

18 Aпреля 2008

по поводу var, напоминает visual foxpro, там можно вообще одной переменной описать всю программу, делая ей release.... Михаил, вы рекомендуете положить Дельфи в печь и заюзать си-шарп, т е не стоит даже начинать по дельфям что либо делать или как?


Михаил Фленов

19 Aпреля 2008

Я не предлагаю отказываться от Delphi и я сам не отказываюсь от него. Я использую очень часто, но просто мне больше стал нравиться C# и VS .NET. Не знаю почему, просто нравиться. Но я не собираюсь все проекты переносить на C#, все, что уже написано у меня, будет продолжать существовать на Delphi.


Атлас

19 Aпреля 2008

Михаил, мне очень нравятся ваши блоги(читаю в  основном только ваши), всегда познавательно читать информацию из "рук" гуру программирования. Также заметил, что некоторые участники форума пытаются еще и спорить с вами, я этого в корне не понимаю, как можно пытаться возражать "отцу" программинга. Вы так сказать альма - матер и все что вы говорите нужно практически записывать и слушать с открытым ртом. Они просто не понимают, насколько вы фундаментальны в этой области и никогда не будете советывать что то по определению неверное. Читал такие вещи, не помню от кого, толи от f.e. nix толи от romul, что вы надоели поддерживать микрософт, хотя я вас очень понимаю, и вы не раз указывали на то, что пользуютесь тем, что для вас удобнее(не навязывая свою точку зрения). Все кто не согласен в высказываниях уважаемого Михаила, хочу сказать следующее, вы должны быть безумно благодарны, что настолько занятый человек, как Михаил делится своими знаниями и переживаниями, а не пытаться найти противоречия в его словах, это настолько глупо, что имхо не поддается рациональному обяснению. Михаил - это звезда отечественного программинга и у него нужно учиться, учиться и еще раз учиться и не более того, все споры приведут к провалу со стороны спорящих.

С уважением к Михаилу. Желаю всего вам наилучшего и почаще пишите о том, как вы видите окружающий виртуальный мир, все остальные мнения меня мало волнуют(за небольшим исключением).


Михаил Фленов

19 Aпреля 2008

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

Но даже если бы я не находил ничего, хороший спор интересен сам по себе. Я люблю спорить с Romul-ом или olegmaster-ом, потому что они всегда приводят хорошие аргументы, показывают, где ошибаюсь (а я далеко не всегда прав) или просто заводят интересный разговор.

Я ничего нового не придумал и не изобрел, поэтому, до "отца" программинга мне еще далеко. Я просто умею писать, и многим нравится, как я пишу.


Lobzik_

22 Aпреля 2008

От оператора var просто \"смердит\" Visual Basic\'ом и JScript\'ом

Переменная должна быть типизирована !!!

Иначе сона можно попытаться засунуть в собачью будку вместо собаки.

В топку данное новшество.



Михаил Фленов

23 Aпреля 2008

В С# все переменные строго типизированы в отличии от названных тобой языков. Как ты думаешь, что будет в C# если выполнить следующий код:

var i = 10;
i = "Test";

Произойдет ошибка на второй строке:

Cannot implicitly convert type string to type int

Почему так произошло? Потому что тип var переменной определяется во время инициализации. Инициализация произошла в первой строке, где в i поместили число и компилятор решил, что быть переменной i числом int. Во второй строке мы в эту переменную пытаемся засунуть строку и это ошибка. Так что строгая типизация никуда не делась. var в C# это вам не Variant в Delphi, куда можно в любой момент засунуть что угодно.


Romul

23 Aпреля 2008

2Lobzik_ Не путай вывод типов с динамической типизацией, они не имеют ничего общего...


Evgeny

30 Aпреля 2008

"мне больше стал нравиться C# и VS .NET. Не знаю почему, просто нравиться."
Михаил и всё таки почему?
Насколько я понимаю всё что написанно на C# и VS .NET предполагается запускать если на машине установлен NET Framework, а если это старенькая машина?


Михаил Фленов

30 Aпреля 2008

Количество старых машин будет сокращаться с каждым днем, поэтому рынок .NET программ будет только расти. Так что эта проблема меня не волнует. К тому же, если человек не может купить себе новый компьютер, то не сможет купить и программу, а значит, я вообще ничего не теряю. Я же пишу в основном коммерческие проекты, а не халявные.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне