Подтвердить что ты не робот

Новые интересные функции С# 4.0

Каковы самые классные новые функции, которые вы, ребята, ищете, или что вы слышали, выпущены в С# 4.0.

4b9b3361

Ответ 1

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

Общая дисперсия для делегатов и интерфейсов аналогична: отсутствие дисперсии является головной болью на данный момент, но во многих местах, где боль не будет покрываться ограниченной дисперсией, доступной на С# 4.

Функции COM меня не особенно интересуют - я действительно должен получить больше информации о том, что они собой представляют.

Необязательные и именованные параметры могут иметь большое значение при создании неизменяемых типов: он включает синтаксис, например:

Person p = new Person (name: "Jon", age: 32);

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

Я лично больше заинтересован в нескольких функциях фреймворка .NET 4.0 - в частности кодовые контракты и параллельные расширения.

Ответ 2

Значения параметров параметра метода:

public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2)
{
  //...
}

Также возможно анонимные типы возврата:

public var MyMethod2()
{
  // ..
}

Ответ 3

IDynamicObject, клей за dynamic, позволяет интерпретировать вызов во время выполнения.

Это интересно для нестандартных сценариев, таких как REST, XML, COM, DataSet, динамические языки и многие другие. Это реализация динамическая отправка, построенная поверх Динамический язык Время выполнения (DLR).

Вместо громоздкой семантики отражения вы указываете на переменные, объявленные как dynamic. Представьте, что вы работаете с объектами Javascript из Silverlight:

dynamic obj = GetScriptObject();

HtmlPage.Window.Alert(obj.someProperty);

Поддерживается все синтаксис С# (я считаю):

HtmlPage.Window.Alert(obj.someMethod() + obj.items[0]);

Отражение само выглядит намного чище:

public void WriteSomePropertyValue(object target)
{
    Console.WriteLine((target as dynamic).SomeProperty);
}

public void WriteSomeMethodValue(object target, int arg1, string arg2)
{
    Console.WriteLine((target as dynamic).SomeMethod(arg1, arg2));
}

dynamic - еще один инструмент в наборе инструментов. Он не меняет статические и динамические дебаты, он просто ослабляет трение.

Ответ 6

Не строго С#, но так как .NET помечен здесь хорошей ссылкой на изменения BCL.

Примечание для себя: необходимо переименовать мой метод расширения Stopwatch.Restart() до выпуска 4.0.

Ответ 7

  • С# 2.0 -Generics (добавлена ​​поддержка .NET Framework, а С# выиграл от этого); шаблон итератора (ключевое слово yield); анонимный методы (ключевое слово делегата), типы с нулевым значением и нулевое значение коалесцирующий оператор (??).
  • С# 3.0 - анонимные типы, методы расширения, инициализаторы объектов, инициализаторы коллекций, неявно типизированные локальные переменные (ключевое слово var), лямбда-выражения (= > ) и шаблон выражения запроса LINQ.
  • С# 4.0 -Опциональные параметры и именованные аргументы, динамические (динамический тип), улучшенный COM-Interop и Contra и Ковариации.

Ответ 8

динамическое ключевое слово похоже на то, что он может очень легко сократить разрыв между динамическими языками, такими как IronRuby или IronPython, что, вероятно, поможет принять его в монокультуре Microsoft..., что меня волнует.

Пока я заинтригован этим, меня также беспокоит, что он будет чрезмерно использован, как Generics и LINQ, SQLCLR и т.д.:)

Ответ 9

С# 4.0

1) PLinq

2) Именованные и необязательные параметры

3) Lazy

4) Co и Contra Variance

5) Параллельная задача

6) Динамический объект

7) Объект Expando

8) Улучшен COM-Interop

9) Кортеж

чтобы назвать несколько

Ответ 10

Возможность писать асинхронный код синхронно с async и ждут - это классно.