- •Введение в 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
- •Использование интерфейсов в качестве параметров
- •Использование интерфейсов в качестве возвращаемых значений
- •Массивы интерфейсных типов
- •Явная реализация интерфейсов
- •Проектирование иерархий интерфейсов
- •Множественное наследование посредством интерфейсных типов
Размещение объектов с помощью ключевого слова new
Как было показано в предыдущем примере кода, объекты должны быть размещены в памяти с использованием ключевого слова new. Если ключевое слово new не указать и попытаться воспользоваться переменной класса в следующем операторе кода, будет получена ошибка компиляции.
Чтобы корректно создать объект с применением ключевого слова new, можно определить и разместить в памяти объект Саr в одной строке кода:
В качестве
альтернативы, определение и размещение
в памяти экземпляра класса может
осуществляться в разных строках кода:
Здесь первый оператор кода просто объявляет ссылку на еще не созданный объект типа Саr. Ссылка будет указывать на действительный объект в памяти только после явного присваивания. Понятие конструкторов Учитывая, что объект имеет состояние (представленное значениями его переменныхчленов), обычно желательно присвоить осмысленные значения полям объекта перед тем, как работать с ним. В настоящий момент тип Саr требует присваивания значений полям perName и currSpeed. Для текущего примера это не слишком проблематично, поскольку открытых элементов данных всего два. Однако нередко классы состоят из нескольких десятков полей. Ясно, что было бы нежелательно писать 20 операторов инициализации для всех 20 элементов данных такого класса. К счастью, в C# поддерживается механизм конструкторов, которые позволяют устанавливать состояние объекта в момент его создания. Конструктор — это специальный метод класса, который вызывается неявно при создании объекта с использованием ключевого слова new. Однако в отличие от “нормального” метода, конструктор никогда не имеет возвращаемого значения (даже void) и всегда именуется идентично имени класса, который он конструирует. Роль стандартного конструктора
Каждый класс C# снабжается стандартным конструктором, который при необходимости может быть переопределен. По определению стандартный конструктор никогда не принимает аргументов. После размещения нового объекта в памяти стандартный конструктор гарантирует установку всех полей данных в соответствующие стандартные значения.
Если вы
не удовлетворены такими стандартными
присваиваниями, можете переопределить
стандартный конструктор в соответствии
со своими нуждами. В целях иллюстрации
модифицируем класс С#, как показано
ниже:
В данном
случае мы заставляем объекты Саr
начинать свою жизнь под именем Chuck и
скоростью 10 миль в час. При этом
создавать объекты Саr со стандартными
значениями можно следующим образом:
Определение специальных конструкторов
Обычно помимо стандартного конструктора в классах определяются дополнительные конструкторы. При этом пользователь объекта обеспечивается простым и согласованным способом инициализации состояния объекта непосредственно в момент его создания. Взгляните на следующее изменение класса Саr, который теперь поддерживает целых три конструктора:
Имейте в виду, что один конструктор отличается от другого (с точки зрения компилятора С#) количеством и типом аргументов. Определение методов с одним и тем же именем, но разным количеством и типами аргументов, называется перегрузкой. Таким образом, класс Саr имеет перегруженный конструктор, чтобы предоставить несколько способов создания объекта во время объявления. В любом случае, теперь можно создавать объекты Саr, используя любой из его открытых конструкторов. Например:
Спроектируйте и реализуйте свой класс с несколькими конструкторами
