- •Введение в c# и платформу .Net Философия .Net
- •Введение в строительные блоки платформы .Net (clr, cts и cls)
- •Роль библиотек базовых классов
- •Понятие общей системы типов (cts)
- •Понятие общеязыковой спецификации (cls)
- •Понятие общеязыковой исполняющей среды (clr)
- •Различия между сборками, пространствами имен и типами
- •Лабораторная работа №1. Создание приложений на языке c# без использования ide Роль .Net Framework 4.5 sdk
- •Построение приложений c# с использованием csc.Ехе
- •Указание целевых входных и выходных параметров
- •Ссылка на внешние сборки
- •Компиляция нескольких файлов исходного кода
- •Лабораторная работа №2. Построение приложений .Net с помощью Visual Studio Создание нового проекта
- •Использование утилиты Solution Explorer
- •Ссылка на внешние сборки
- •Утилита Object Browser
- •Фрагменты кода и технология Surround With
- •Утилита Class Designer
- •Лабораторная работа №3. Основы программирования на c# Структура простой программы c#
- •Класс System.Console
- •Форматирование числовых данных
- •Системные типы данных и соответствующие ключевые слова c#
- •Объявление и инициализация переменных
- •Иерархия классов для типов данных
- •Члены числовых типов данных
- •Члены System.Boolean
- •Члены System.Char
- •Работа со строковыми данными
- •Базовые манипуляции строками
- •Управляющие последовательности
- •Итерационные конструкции c#
- •Лабораторная работа №4. Главные конструкции программирования на с# Методы и модификаторы параметров
- •Стандартное поведение передачи параметров по значению
- •Модификатор out
- •Модификатор ref
- •Модификатор params
- •Определение необязательных параметров
- •Вызов методов с использованием именованных параметров
- •Массивы в c# Объявление и инициализация массивов
- •Определение массива объектов
- •Базовый класс System.Array
- •Управление хранилищем, лежащим в основе перечисления
- •Объявление переменных типа перечисления
- •Динамическое извлечение пар “имя/значение” перечисления
- •Типы структур
- •Объектно- ориентированное программирование на c# Лабораторная работа №5. Работа с классами Знакомство с типом класса c#
- •Размещение объектов с помощью ключевого слова new
- •Определение специальных конструкторов
- •Роль ключевого слова this
- •Еще раз о необязательных аргументах
- •Понятие ключевого слова static
- •Определение статических полей данных
- •Определение статических классов
- •Основные принципы объектно-ориентированного программирования
- •Роль инкапсуляции
- •Роль наследования
- •Роль полиморфизма
- •Лабораторная работа №6. Инкапсуляция Модификаторы доступа c#
- •Стандартные модификаторы доступа
- •Первый принцип: службы инкапсуляции c#
- •Инкапсуляция с использованием традиционных методов доступа и изменения
- •Использование свойств внутри определения класса
- •Свойства, доступные только для чтения и только для записи
- •Взаимодействие с автоматическими свойствами
- •Понятие синтаксиса инициализации объектов
- •Работа с данными константных полей
- •Понятие полей, допускающих только чтение
- •Понятие частичных типов
- •Лабораторная работа №7. Наследование Базовый механизм наследования
- •Указание родительского класса для существующего класса
- •Ключевое слово sealed
- •Управление созданием базового класса с помощью ключевого слова base
- •Хранение секретов семейства: ключевое слово protected
- •Добавление запечатанного класса
- •Реализация модели включения/делегации
- •Определения вложенных типов
- •Лабораторная работа №8. Полиморфизм
- •Переопределение виртуальных членов в ide-среде Visual Studio
- •Запечатывание виртуальных членов
- •Абстрактные классы
- •Понятие полиморфного интерфейса
- •Сокрытие членов
- •Правила приведения к базовому и производному классу
- •Ключевое слово as
- •Ключевое слово is
- •Главный родительский класс System.Object
- •Переопределение System.Object.ToString()
- •Переопределение System.Object.Equals()
- •Статические члены System.Object
- •Лабораторная работа №9. Структурированная обработка исключений
- •Роль обработки исключений .Net
- •Строительные блоки обработки исключений в .Net
- •Базовый класс System.Exception
- •Простейший пример
- •Генерация общего исключения
- •Перехват исключений
- •Конфигурирование состояния исключения
- •Исключения уровня приложения (System.ApplicationException)
- •Построение специальных исключений, способ первый
- •Построение специальных исключений, способ второй
- •Обработка нескольких исключений
- •Общие операторы catch
- •Внутренние исключения
- •Какие исключения могут генерировать методы?
- •Результат наличия необработанных исключений
- •Лабораторная работа №10. Работа с интерфейсами Понятие интерфейсных типов
- •Реализация интерфейса
- •Вызов членов интерфейса на уровне объектов
- •Получение ссылок на интерфейсы: ключевое слово as
- •Получение ссылок на интерфейсы: ключевое слово is
- •Использование интерфейсов в качестве параметров
- •Использование интерфейсов в качестве возвращаемых значений
- •Массивы интерфейсных типов
- •Явная реализация интерфейсов
- •Проектирование иерархий интерфейсов
- •Множественное наследование посредством интерфейсных типов
Понятие общей системы типов (cts)
Сборка может содержать любое количество различающихся типов. В мире .NET тип — это просто общий термин, используемый для ссылки на члены из набора {класс, интерфейс, структура, перечисление, делегат}. При построении решений на любом языке .NET, скореевсего, придется взаимодействовать со многими из этих типов. Например, сборка может определять класс, реализующий несколько интерфейсов. Возможно, метод одного из интерфейсов принимает в качестве входного параметра перечисление, а возвращает структуру. Вспомните, что CTS является формальной спецификацией, в которой указано, как типы должны быть определены, чтобы они могли обслуживаться средой CLR. Внутренние детали CTS обычно интересуют только тех, кто занимается разработкой инструментов и/или компиляторов для платформы .NET. Однако все .NET-программисты должны уметь работать с пятью типами, определенными CTS, на выбранном языке.
Каждый совместимый с .NET язык поддерживает, как минимум, понятие типа класса, которое играет центральную роль в ООП. Класс может включать любое количество членов (таких как конструкторы, свойства, методы и события) и элементов данных (полей). В C# классы объявляются с помощью ключевого слова class, примерно так:
// Тип класса C# с одним методом.
class Calc
{
public int Add(int x, int y)
{
return x + y;
}
}
Интерфейсы — это всего лишь именованные коллекции определений абстрактных членов, которые могут поддерживаться (т.е. быть реализованными) в заданном классе или структуре. В C# типы интерфейсов определяются с помощью ключевого слова interface. По соглашению имена всех интерфейсов .NET начинаются с прописной буквы I, как показано в следующем примере:
// Тип интерфейса в C# обычно объявляется
// открытым, чтобы позволить типам в других
// сборках реализовать его поведение.
public interface IDraw
{
void Draw();
}
Концепция структуры также формализована в рамках CTS. Тем, кто имел дело с языком С, будет приятно узнать, что определяемые пользователем типы (user-defined type — UDT) сохранились в мире .NET (хотя их поведение несколько изменилось). Выражаясь просто, структуру можно считать облегченным типом класса, имеющим семантику на основе значений. Более подробно структуры рассматриваются в главе 4. Обычно структуры лучше всего подходят для моделирования геометрических и математических данных и создаются в C# с применением ключевого слова struct, как показано в следующем примере:
// Тип структуры в C#.
struct Point
{
// Структуры могут содержать поля.
public int xPos, yPos;
// Структуры могут содержать параметризованные конструкторы.
public Point(int х, int у)
{ xPos = x; yPos = y;}
// Структуры могут определять методы.
public void PrintPosition()
{
Console.WriteLine("({0}, {1})", xPos, yPos);
}
}
Перечисления — это удобная программная конструкция, которая позволяет группировать пары “имя-значение”. Например, предположим, что требуется создать игровое приложение, в котором игроку бы позволялось выбирать персонажа одной из трех категорий: Wizard (маг), Fighter (воин) или Thief (вор). Вместо того чтобы использовать и отслеживать числовые значения для каждого варианта, гораздо удобнее создать строго типизированное перечисление с помощью ключевого слова enum:
// Тип перечисления C#.
enum CharacterType
{
Wizard = 100,
Fighter = 200,
Thief = 300
}
Делегаты являются .NET-эквивалентом безопасных к типам указателей на функции в стиле С. Главное отличие заключается в том, что делегат .NET представляет собой класс, порожденный от System.MulticastDelegate, а не просто указатель на низкоуровневый адрес в памяти. В C# делегаты объявляются с помощью ключевого слова delegate:
// Этот тип делегата в C# может "указывать" на любой метод,
// возвращающий значение int и принимающий два значения int.
delegate int BinaryOp(int x, int y);
Финальный аспект спецификации CTS, который следует знать на текущий момент, заключается в том, что она устанавливает четко определенный набор фундаментальных типов данных. Хотя в каждом языке для объявления фундаментального типа данных обычно предусмотрено уникальное ключевое слово, ключевые слова всех языков .NET в конечном итоге соответствуют одному и тому же типу CTS, определенному в сборке mscorlib.dll.
Таблица 1. Встроенные типы данных CTS
