Каковы самые классные новые функции, которые вы, ребята, ищете, или что вы слышали, выпущены в С# 4.0.
Новые интересные функции С# 4.0
Ответ 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
- еще один инструмент в наборе инструментов. Он не меняет статические и динамические дебаты, он просто ослабляет трение.
Ответ 4
Ответ 5
Расширенная поддержка Деревья выражений!
Ответ 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 и ждут - это классно.