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

Каковы самые крутые новые функции, которые вы, ребята, ищете или которые вы слышали, выпускаются в 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но.

  • C # 'dynamic' не может получить доступ к свойствам анонимных типов, объявленных в другой сборке
  • Контравариантность объяснялась
  • Почему C # не выводит мои общие типы?
  • Функция рекурсии LINQ?
  • перегрузка метода vs необязательный параметр в C # 4.0
  • Как использовать jquery или ajax для обновления частичного просмотра бритвы в c # / asp.net для проекта MVC
  • Перенаправление из asp.net web api post action
  • Добавление неизвестных (во время разработки) свойств в ExpandoObject
  • Почему в нашем проекте требуются интерфейсные слои / абстрактные classы?
  • Выполняется ли в System.Windows.Forms.Timer другой stream, чем пользовательский интерфейс?
  • Почему я получаю «Один или несколько типов, необходимых для компиляции динамического выражения, не могут быть найдены»?
  • Interesting Posts
    Давайте будем гением компьютера.