c# 3.0
DESCRIPTION
C# 3.0, Андрей Свердлов, Клуб MAInfo.ruTRANSCRIPT
C# 3.0
Андрей Свердлов
Эволюция языков программирования
Что хотелось бы от ЯП
Мульти-парадиг-
мальность
Унифици-рованный доступ к данным
Чтобы писалось в
кайф
Деклара-тивное
програм-мирование
Повышение уровня
абстракции
Продуктивность
Что насчет C#?
C# (1.0)
C# (1.0)
• Объектно-ориентированный язык;• Библиотека классов:
– Windows Forms – дизайн окон;
– ADO.NET – доступ к данным;
– ASP.NET – web-приложения;
– .NET Remoting – сетевое взаимодействие;
• Делегаты и события;• Reflection – динамическая информация о типах
данных;• GC – сборка мусора, автоматическое управление
памятью (кучей).
C# (1.0)
Мульти-парадиг-
мальность
Унифици-рованный доступ к данным
Чтобы писалось в
кайф
Деклара-тивное
програм-мирование
Повышение уровня
абстракции
Продуктивность
Что насчет C#?
C# (1.0)
C# 2.0
Управляемый код (сборка мусора, reflection, …)
C# 2.0
• Поддержка 64-битных приложений;• Поддержка Access Control List;• Улучшены:
– ADO.NET – асинхронность и пользовательские типы;
– ASP.NET – быстрее, выше, сильнее;– Всякие сетевые штуки;– I/O;– …
• Generic – List<T> m_MyList;
C# 2.0
Мульти-парадиг-
мальность
Унифици-рованный доступ к данным
Чтобы писалось в
кайф
Деклара-тивное
програм-мирование
Повышение уровня
абстракции
Продуктивность
Что насчет C#?
C# (1.0)
C# 2.0
C# 3.0
Управляемый код (сборка мусора, reflection, …)
Generics (родовое программирование, статическая параметризация типов)
C# 3.0• Изменения языка:
– Неявная типизация локальных перменных (Implicitly Typed Local Variables);– Инциализация объектов и коллекций (Object & Collection Initializers);– Расширения библиотечных классов (Extension Methods);– Анонимные типы данных (Anonymous Types);– Лямбда-вычисления (Lambda Expressions);– Внутренний язык запросов (Query Keywords);– Автосвойства (Auto-implemented Properties);– Частичные определения методов (Partial Method Definitions);
• Работа с данными:– LINQ;– O/R Designer;– SQL Server Compact 3.5 (только в Visual C# 2008 Express);
• Встроенная поддержка WPF (редактор форм + IntelliSense);• Встроенная поддержка WCF;• Создание дистрибутивов ClickOnce для WPF Browser Applications.
C# 3.0
Мульти-парадиг-
мальность
Унифици-рованный доступ к данным
Чтобы писалось в
кайф
Деклара-тивное
програм-мирование
Повышение уровня
абстракции
Продуктивность
Что насчет C#?
C# (1.0)
C# 2.0
C# 3.0
Управляемый код (сборка мусора, reflection, …)
Generics (родовое программирование,
статическая параметризация типов)
Декларативное программированиеLanguage Integrated Query
C# 3.0• Изменения языка:
– Неявная типизация локальных переменных (Implicitly Typed Local Variables);– Инциализация объектов и коллекций (Object & Collection Initializers);– Анонимные типы данных (Anonymous Types);– Расширения библиотечных классов (Extension Methods);– Внутренний язык запросов (Query Keywords);– Лямбда-вычисления (Lambda Expressions);– Автосвойства (Auto-implemented Properties);– Частичные определения методов (Partial Method Definitions);
• Работа с данными:– LINQ;– O/R Designer;– SQL Server Compact 3.5;
• Встроенная поддержка WPF (редактор форм + IntelliSense);• Встроенная поддержка WCF;• Создание дистрибутивов ClickOnce для WPF Browser Applications.
Неявная типизация локальных переменных
Демо №1.1
Неявная типизация локальных переменных
• Объявление типа var;
• Только для локальных переменных;
• Не является слабой или отложенной типизацией! Компилятор сам определяет наиболее подходящий тип;
• Может использоваться внутри for, foreach, using.
Инциализация объектов и коллекций
Демо №1.2
Инциализация объектов и коллекций
• Нужно всегда вызывать нормальный конструктор;
• Коллекция – все, что IEnumerable и имеет public метод Add;
• Поля объектов инициализируются в любом порядке и количестве.
Анонимные типы данных
Демо №1.3
Анонимные типы данных
• Это классы с public read-only полями;
• Обязательно использование var;
• Тип знает только компилятор – динамические типы!
• Дальнейшее использование данных с анонимным типом только через var.
Внутренний язык запросов
• Теперь можно писать запросы, например:
• Ключевые слова LINQ встроены в синтаксис C#.
О LINQ чуть позже
var res = from x in Students where x.Age>16 select x.Name;
Расширения библиотечных классов
Демо №2
Расширения библиотечных классов
• Можно «добавлять» методы в библиотечные классы;
• Методы доступны только как методы конкретной переменной;
• Методы объявляются как static в static классе;
• В аргументах обязательно указывается this <расширяемый_класс> <аргумент>
Автосвойства
Демо №3
Автосвойства
• Обязательно содержат и get, и set;
• В read-only свойстве set заменяется на private set;
• Удобно
Частичные определения методов
• Определение: public partial void Method ();
• Реализация: public partial void Method () {…} ;
• Странная ситуация - нет документации в MSDN.
C# 3.0• Изменения языка:
– Неявная типизация локальных переменных (Implicitly Typed Local Variables);– Инциализация объектов и коллекций (Object & Collection Initializers);– Расширения библиотечных классов (Extension Methods);– Анонимные типы данных (Anonymous Types);– Лямбда-вычисления (Lambda Expressions);– Внутренний язык запросов (Query Keywords);– Автосвойства (Auto-implemented Properties);– Частичные определения методов (Partial Method Definitions);
• Работа с данными:– LINQ;– O/R Designer;– SQL Server Compact 3.5;
• Встроенная поддержка WPF (редактор форм + IntelliSense);• Встроенная поддержка WCF;• Создание дистрибутивов ClickOnce для WPF Browser Applications.
LINQ
from id in source
{ from id in source |
join id in source on expr equals expr [ into id ] |
let id = expr |
where condition |
orderby ordering, ordering, … }
select expr | group expr by key
[ into id query ]
LINQ и расширения
• Все выражения в запросе преобразуются в вызовы методов расширений:– Where; – OrderBy;– Select;– GroupBy;– Join;– …
Object Relational Designer
• Визуальный редактор классов и их отношений;
• Позволяет привязывать объекты из базы данных к объектам LINQ;
• Похож на UML, но намного беднее;
• Наверно прикольная штука
C# 3.0• Работа с данными:
– LINQ;– O/R Designer;– SQL Server Compact 3.5;
• Изменения языка:– Неявная типизация локальных переменных (Implicitly Typed Local Variables);– Инциализация объектов и коллекций (Object & Collection Initializers);– Расширения библиотечных классов (Extension Methods);– Анонимные типы данных (Anonymous Types);– Лямбда-вычисления (Lambda Expressions);– Внутренний язык запросов (Query Keywords);– Автосвойства (Auto-implemented Properties);– Частичные определения методов (Partial Method Definitions);
• Встроенная поддержка WPF (редактор форм + IntelliSense);• Встроенная поддержка WCF;• Создание дистрибутивов ClickOnce для WPF Browser Applications.
Всё!Спасибо, что выдержали %)
Андрей Свердлов