- •А. А. Волосевич
- •Содержание
- •1. Общая характеристика платформы .Net
- •1.1. Инфраструктура платформы .Net
- •1.2. Версии платформы .Net
- •2. Общие концепции синтаксиса языка c#
- •3. Система типов clr и языка c#
- •4. Идентификаторы, ключевые слова и литералы
- •5. Выражения и операции
- •1. Первичные операции
- •2. Унарные операции
- •6. Операторы
- •6.1. Операторы объявления
- •6.2. Операторы выражений
- •6.3. Операторы перехода
- •6.4. Операторы выбора
- •6.5. Операторы циклов
- •6.6. Прочие операторы
- •7. Начальные сведения о массивах
- •8. Классы
- •8.1. Допустимые элементы класса
- •8.2. Модификаторы доступа для элементов и типов
- •8.3. Разделяемые классы
- •8.4. Использование класса
- •9. Методы
- •9.1. Описание метода
- •9.2. Вызов метода
- •9.3. Разделяемые методы
- •10. Свойства и индексаторы
- •11. Статические элементы и методы расширения
- •11.1. Статические элементы
- •11.2. Статические классы
- •11.3. Методы расширения
- •12. Конструкторы и инициализация объектов
- •13. Наследование классов
- •14. КлассSystem.Objectи иерархия типов
- •15. Структуры
- •16. Перечисления
- •17. Интерфейсы
- •18. Универсальные шаблоны
- •18.1. Универсальные классы и структуры
- •18.2. Ограничения на параметры универсальных типов
- •18.3. Ковариантность и контравариантность
- •18.4. Универсальные методы
- •19. Использование универсальных шаблонов
- •19.1. Кортежи
- •19.2. Типы, допускающие значение null
- •19.3. Прочие примеры универсальных шаблонов
- •20. Делегаты
- •21. Анонимные методы и лямбда-выражения
- •22. События
- •23. Перегрузка операций
- •24. Анонимные типы
- •25. Пространства имён
- •26. Генерация и обработка исключительных ситуаций
- •27. Директивы препроцессора
- •28. Документирование исходного кода
- •Литература
Литература
1. Албахари, Дж. C# 3.0. Справочник: Пер. с англ. / Дж. Албахари, Б. Албахари. – 3-е изд. – Спб.: БХВ-Петербург, 2009. – 944 с.: ил.
2. Рихтер, Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# / Дж. Рихтер. – 3-е изд. – Спб.: Питер, 2012. – 928 с.: ил.
3. Троелсен, Э. Язык программирования C# 2010 и платформа .NET4.0 / Э. Троелсен. – 5-е изд. – М.: ООО «И.Д. Вильямс», 2011. – 1392 с.: ил.
4. Хейлсберг, А. Язык программирования C#. КлассикаComputersScience. / А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд. – 4-е изд. – Спб.: Питер, 2012. – 784 с.: ил.
5. Цвалина, К. Инфраструктура программных проектов: соглашения, идиомы и шаблоны для многократно используемых библиотек .NET. : Пер. с англ. / К. Цвалина. – М.: ООО «И.Д. Вильямс», 2011. – 416 с.: ил.
1При записи целочисленных литералов не рекомендуется использовать суффиксl(строчная латинская букваL), так как его легко перепутать с единицей.
1В C# имеется директиваusingдля импорта пространств имён. Следует различать директивуusingи операторusing.
1Объявлениеint[,][] dataзадаёт двумерный массив, состоящий из одномерных массивов. Иными словами, спецификаторы размерностей читаются слева направо.
1В CLR есть модификатор доступа, соответствующийprotectedиinternal. Но при помощи языка C# такой уровень доступа описать нельзя.
1Разделяемыми могут быть не только классы, но структуры и интерфейсы.
2Для доступа к константе применяется синтаксисимя-класса.имя-константы.
1Индексаторы транслируются в методы с именамиget_Item()иset_Item(). Изменить имена методов можно, используя атрибут[IndexerName].
2В отличие от языка C#, CLR позволяет создавать статические индексаторы.
1ЯзыкC# допускает толькометодырасширения, свойств и индексаторов расширения не существует.
1Если класс содержит статический конструктор (возможно, пустой), компиляторC# генерирует код, выполняющий инициализацию статических полей классанепосредственноперед первым использованием класса. Без статического конструктора такая инициализация проводитсяв произвольный момент доиспользования класса.
1Формально, отobjectне наследуются типы-указатели, используемые в неуправляемом коде (например,int*), а также интерфейсы (но интерфейсы приводятся кobject).
1Операция упаковки выполняется и в случае, когда переменной типа интерфейс присваивается переменная типа значения. Этот аспект будет разобран при рассмотрении интерфейсов.
1В отличие от классов, в структуре конструктор без параметров присутствует даже при объявлении пользовательского конструктора.
1И классStack<T>, и классDictionary<K, V>рассмотрены только как примеры. В .NETFrameworkуже имеются полноценные аналоги данных классов.
1Универсальные методы могут заменить перекрытие методов в пользовательском типе, если алгоритмы работы различных версий перекрытых методов не зависят от типов параметров.
1Делегаты относятся к неизменяемым типам. Поэтому методыCombine()иRemove()возвращают новые объекты-делегаты.
1Если аргументов несколько, скобки нужно указывать. Когда лямбда-оператор не имеет входных аргументов, указываются пустые скобки.
1Поведение, аналогичное событиям, можно получить, используя открытие поля делегатов. Ключевое словоeventзаставляет компилятор проверять, что описание и генерация события происходят в одном классе, и запрещает для события все операции, кроме+=и-=.