Сегодня хотел бы рассмотреть, как развивался язык программирования C#, какие новые фичи появлялись и кратко опишу каждую. Думаю новичкам в .Net необходимо особенно внимательно изучить всё нижеописанное, станет понятно куда дальше гуглить. Некоторые темы уже подробно разобраны в моем блоге. Буду вести обзор C# начиная с версии 2.0. Итак, приступим.
Версия C# 2.0
-
- Generics (или дженерики). Эта возможность позволила создавать универсальные шаблоны, обобщенные алгоритмы. Код стал безопаснее, быстрее и проще для чтения и сопровождения;
- Iterators (итераторы) – средство, позволяющее достаточно сильно упростить создание перечислителей для последовательности(коллекции) чего-либо. Введена новая конструкция foreach. Появились generic-интерфейсы — IEnumerator, IEnumerable;
- Anonymous methods(анонимные методы) – обеспечивает технику передачи блока кода как параметр делегата. Иными словами, инициализации делегатов телами методов. Пример:
-
-
delegate void MyPrint(int number);
-
MyPrint print = delegate(int number)
-
{
-
Console.WriteLine(«This is anonymous method: {0}», number);
-
};
-
- Partial types(частичные классы) – возможность разбивать код класса(class) по нескольким файлам. В основном фича добавлена для упрощения жизни при кодогенерации. Посмотрите на исходники WinForms приложений( Visual Studio генерирует partial класс в файл *.Designer.cs);
Версия C# 3.0
-
- var — новое ключевое слово в языке C#. Служит для определения типа локальной переменной из присваиваемого значения.
-
var str = «some string»; // str принадлежит типу string
-
- anonymous types(анонимные типы) — тип, у которого нет имени и он анонимен. Как же оперировать экземпляром такого типа? Для этого и нужен var.
-
var anonymType = new { Name = “s”, number = 10};
-
- extension methods (методы расширения) — средство расширения функционала у существующего класса. Подробнее здесь.
- лямбда-выражения — новый способ реализации, инициализации делегатов. Это аналог анонимных методов из C# 2.0, с более кратким и приятным синтаксисом.
- частичные методы — позволяют отделить определение от реализации. Они либо не имеют реализации, либо — только одну.
-
-
partial class MyProgram
-
{
-
static void Main()
-
{
-
partMethod();
-
}
-
static partial void partMethod();
-
}
- partial class MyProgram
- {
- static partial void partMethod()
- {
- //some realization
- }
- }
-
-
- auto properties — свойства, которые являются своеобразной оберткой над приватной переменной. Оно не содержит в теле какой-либо логики.
-
public SomeProperty { get; set; }
- object initialization — новый синтаксис для инициализации коллекций и объектов
Отдельным пунктом упомяну о LINQ. Большинство нововведений, описанных выше, являются его основой, ядром.Linq — новый язык запросов для разного рода источников данных(xml,коллекции объектов, БД и т.д.). Например получить список всех нечетные чисел, отсортированных по убыванию из массива можно так:
-
-
int[] array = { 1, 7, 4, 12, 9 };
-
List<int> query = array.Where(x => x % 2 == 1).OrderByDescending(x => x).ToList();
-
Версия C# 4.0
-
- dynamic — новый динамический тип данных. Проверка типа происходит не во время компиляции, а — выполнения
- именованные и необязательные параметры для методов. об этом я писал ранее
-
-
void Method(int first, int second, bool check = true){}
-
//вызов метода так
-
Method(1, 2);
-
//либо так
-
Method(second: 1, first: 10, check:false);
-
-
- ковариантности и контравариантности обобщений — теперь generic следует правилам наследования
-
-
interface IMyInterface1<out T> {}
-
interface IMyInterface2<in T> {}
-
- новые возможности для COM Interop
Версия C# 5.0
- async,await — новые ключевые слова для упрощения работы с асинхронностью в коде