Новые интересные функции C # 4.0
Каковы самые крутые новые функции, которые вы, ребята, ищете или которые вы слышали, выпускаются в c # 4.0.
- Почему C # (4.0) не допускает совпадения и контравариантность в типах универсального classа?
- ASP.Net MVC - чтение файла из HttpPostedFileBase без сохранения
- Метод расширения и динамический объект
- Разница между ковариацией и противоречием
- Как визуализировать JavaScript в разделе MasterLayout с частичного просмотра?
- Почему AddRange быстрее, чем использование цикла foreach?
- Почему в classах C # 4.0 нет общей дисперсии?
- Пример ковариации и контравариантности в реальном мире
Динамический материал звучит круто, если вам это нужно, но я не ожидаю, что использую его очень часто.
Общая дисперсия для делегатов и интерфейсов аналогична: отсутствие дисперсии является головной болью на данный момент, но многие из мест, где это боль, не будут покрываться ограниченной дисперсией, доступной на C # 4.
Функции COM меня не особенно интересуют – я действительно должен больше разбираться в том, что они есть.
Необязательные и именованные параметры могут иметь большое значение при создании неизменяемых типов: он позволяет использовать синтаксис:
Person p = new Person (name: "Jon", age: 32);
без наличия гигантских комбинаций перегрузок конструктора. Я бы предпочел немного больше поддержки для написания неизменяемых типов в виде автоматически загружаемых свойств, но я не ожидаю, что мы их получим. (На данный момент они, конечно, не представлены в предлагаемом списке функций.)
Меня лично больше интересует пара функциональных возможностей .NET 4.0 – в частности, кодовые контракты и параллельные расширения .
Значения по умолчанию параметра метода:
public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2) { //... }
Также возможно анонимные типы возврата:
public var MyMethod2() { // .. }
Кортеж
IDynamicObject
, клей dynamic
, позволяет интерпретировать вызов во время выполнения.
Это интересно для нестандартных сценариев, таких как REST, XML, COM, DataSet
, динамические языки и многие другие. Это реализация динамической диспетчеризации, построенной на основе динамического языка Runtime (DLR) .
Вместо громоздкой семантики отражения вы указываете на переменные, объявленные как dynamic
. Представьте, что вы работаете с объектами Javascript из Silverlight:
dynamic obj = GetScriptObject(); HtmlPage.Window.Alert(obj.someProperty);
Все синтаксисы C # поддерживаются (я считаю):
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
– еще один инструмент в наборе инструментов. Он не меняет статические и динамические дебаты, он просто ослабляет трение.
Расширенная поддержка деревьев выражений !
Не строго C #, но поскольку .NET помечен здесь, это хорошая ссылка на изменения BCL .
Примечание к себе: необходимо переименовать мой метод продолжения Stopwatch.Restart()
до выпуска 4.0. 🙂
- C # 2.0 -Generics (поддержка .NET Framework была добавлена, и C # выиграл от этого); шаблон iteratorа (ключевое слово yield); анонимные методы (ключевое слово делегата), типы с нулевым значением и оператор нулевой коалесценции (??).
- C # 3.0 – Анонимные типы, методы расширения, инициализаторы объектов, инициализаторы коллекции, неявно типизированные локальные переменные (ключевое слово var), lambda-выражения (=>) и шаблон выражения запроса LINQ.
- C # 4.0 -Опциональные параметры и именованные аргументы, Динамическая типизация (динамический тип), улучшенный COM-Interop, Contra и Co-Variance.
динамическое ключевое слово похоже на то, что он может легко преодолеть разрыв между динамическими языками, такими как IronRuby или IronPython, что, вероятно, поможет принять его в monoкультуре Microsoft …, что меня волнует.
Хотя я заинтригован этим, меня также беспокоит, что это будет чрезмерно использовано, как Generics и LINQ, SQLCLR и т. Д. 🙂
C # 4.0
1) PLinq
2) Именованные и необязательные параметры
3) Ленивый
4) Отклонение Co & Contra
5) Параллельная задача
6) Динамический объект
7) Объект Expando
8) Улучшенный COM-Interop
9) Кортеж
только чтобы назвать несколько
Возможность писать asynchronous код синхронно с асинхронным и ждущим – это classно.