Новые возможности C# 4.0
В первую очередь хочу поблагодарить всех, кто помог организовать вторую встречу User Group, а также всех, кто на нее пришел. На мой взгляд, все прошло довольно таки здорово и приятно. Надеюсь, в дальнейшем все будет только лучше!
Мой доклад был посвящен новым возможностям C# 4.0, поэтому для тех, кто не смог прийти, кратко изложу суть материала.
Эволюцию языка C# можно изобразить в виде следующей диаграммы:
Как мы видим из этой диаграммы, до версии 2.0 язык C# развивался в том направлении, чтобы стать полноценным языком программирования на управляемом коде. В версии 3.0 были добавлены элементы динамических языков (LINQ), а с версии 4.0 C# можно вполне считать полноценным динамическим языком.
Основные тенденции развития языка:
1. Декларативное программирование - т.е. в отличие от императивного программирования, акцент делается на то, ЧТО сделать, а не на то, КАК сделать. Этот принцип заложен в LINQ, ASP.NET Dynamic Data, Parallel Extensions и др., когда программист концентрирует внимание на бизнес логике, а не на ее реализацию.
2. Динамическое программирования - работа с слабо типизированными объектами, объектами и классами, написанных на других языках.
3. Параллелизм - разработка распределенных программ, выполнение кода параллельно на разных компьютерах или на разных ядрах системы.
Динамическая типизация объектов
Сейчас, для того, чтобы выполнить операцию сложения Add некого объекта Calculator, нам необходимо выполнить такой код:
Если мы не знаем тип объекта Calculator, то код будет несколько другим:
Вызов функции JavaScript будет иметь третий вид:
В C# 4.0 все три варианта можно будет записать в виде:
Тип dynamic статически типизирован как динамический, а функция Add будет исполняться в рантайме благодаря специальным байндерам (binder):
Параметры по умолчанию и именованные аргументы
Дождались... То, что было в Visual С++ 6.0 и есть в VB.NET, наконец доступно в C#: параметрам можно задавать значения по умолчанию и передавать значение параметров по их именах:
Упрощенная работа с COMЗапись вида:
можно будет заменить на:
В целом, изменения в области работы с COM, такие:
- Автоматическое приведение object -> dynamic
- Параметры по умолчанию и именованные аргументы
- Индексируемые свойства
- Необязательный"ref" модификатор (только для COM!!!)
- Встраивание Interop типов ("No PIA")
Ко- и контра-вариантность
Если раньше можно было писать
object[] obj = new string[0];
и нельзя было писать
IEnumerable
то теперь это возможно благодаря ко- и контравариантным свойствам некоторых интерфейсов и делегатов. Кроме того, эти свойства безопастны, и не дадут возможность написать код. который "упадет" в рантайме еще на уровне компиляции.
Компилятор как сервис
Если раньше компилятор можно было сравнить с "черным ящиком", то теперь программист будет иметь возможность выполнять куски кода, которые написаны в виде строки, иметь доступ ко всему дереву вызовов и много другое.
Например, запись:
ev.Eval("for(int i=0; i<10;i++) Console.WriteLine(i);");
выведет в рантайме список чисел от 0 до 9.
Это даст возможность писать свои рефакторинги любой сложности, "на-лету" генерировать и исполнять код и т.д.
Ссылки и материалы
Скачать оригинальную презентацию с Платформы-2009 - [View:/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/romank/DT_2D00_211.pptx]
Скачать примеры кода для VS 2010 CTP - [View:/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/romank/CSharpCTPSamples.zip]
Платформа-2009 - список докладов (для скачивания материалов неообходимо иметь LiveID)
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |