Новые возможности C# 4.0

пятница, 30 января 2009, Александр Краковецкий

В первую очередь хочу поблагодарить всех, кто помог организовать вторую встречу 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, нам необходимо выполнить такой код:

Слайд 12

Calculator calc = GetCalculator();
int sum = calc.Add(10, 20);

Если мы не знаем тип объекта Calculator, то код будет несколько другим:

Слайд 12

object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add",
    BindingFlags.InvokeMethod, null,
    new object[] { 10, 20 });
int sum = Convert.ToInt32(res);

Вызов функции JavaScript будет иметь третий вид:

Слайд 12

ScriptObject calc = GetCalculator();
object res = calc.Invoke("Add", 10, 20);
int sum = Convert.ToInt32(res);

В C# 4.0 все три варианта можно будет записать в виде:

Слайд 12

dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);

Тип dynamic статически типизирован как динамический, а функция Add будет исполняться в рантайме благодаря специальным байндерам (binder):


Параметры по умолчанию и именованные аргументы

Дождались... То, что было в Visual С++ 6.0 и есть в VB.NET, наконец доступно в C#: параметрам можно задавать значения по умолчанию и передавать значение параметров по их именах:

Упрощенная работа с COM

Запись вида:

Слайд 20

object fileName = "Test.docx";
object missing  = System.Reflection.Missing.Value;
doc.SaveAs(ref fileName,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing);

можно будет заменить на:

Слайд 20

doc.SaveAs("Test.docx");

В целом, изменения в области работы с COM, такие:

  • Автоматическое приведение object -> dynamic
  • Параметры по умолчанию и именованные аргументы
  • Индексируемые свойства
  • Необязательный"ref" модификатор (только для COM!!!)
  • Встраивание Interop типов ("No PIA")


Ко- и контра-вариантность

Если раньше можно было писать

object[] obj = new string[0];

и нельзя было писать

IEnumerable obj = new List();

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


Компилятор как сервис

Если раньше компилятор можно было сравнить с "черным ящиком", то теперь программист будет иметь возможность выполнять куски кода, которые написаны в виде строки, иметь доступ ко всему дереву вызовов и много другое.

Например, запись:

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]

IronPython

Платформа-2009 - список докладов (для скачивания материалов неообходимо иметь LiveID)

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии