- •1. Net Framework – единый каркас среды разработки. Исполнительная среда clr. Понятие и функции среды разработки. Управляемый и неуправляемый код. Сборщик мусора.
- •2. Управляемый и неуправляемый код. .Net Framework: особенности разработки приложений с использованием библиотеки .Net Framework. Необходимость установки нескольких версий библиотеки.
- •3. Единство каркаса Framework .Net. Встроенные примитивные и структурные типы.
- •4. Классификация типов данных языка с#. Система типов .Net Framework и языка с#: особенности применения. Преобразования типов. Семантика присваивания. Преобразование к типу Object.
- •6. Массивы языка с#. Статические и динамические массивы. Массивы объектов. Семантика присваивания.
- •7. Строки c#. Классы String и StringBuilder. Назначение, основные возможности, отличие.
- •8. Строки c#. Класс String. Конструкторы класса. Методы работы со строками.
- •9. Строки c#. Класс String. Методы Join и Split.
- •10. Строки c#. Класс StringBuilder. Конструкторы класса. Методы работы со строками. Основные методы. Емкость буфера.
- •11. Структуры c#. Синтаксис. Возможные ситуации использования классов и структур. Перечисления в c#. Назначение. Синтаксис.
- •12. Классы в c#. Роль классов в ооп. Синтаксис классов в c#: обычных, абстрактных, универсальных. Поля и методы классов. Области видимости.
- •13. Процедуры и функции на примере языка с#. Определение. Синтаксис. Использование ключевых слов для передачи параметров.
- •14. Классы в c#. Методы-свойства. Назначение. Синтаксис. Пример описания.
- •15. Классы в c#. Статические поля и методы. Конструкторы и деструкторы. Статический конструктор класса: пример объявления и использования.
- •16. Классы в c#. Отношения между классами. Клиенты и наследники. Отношение вложенности. Расширение клиента класса.
- •17. Классы в c#. Отношения между классами. Отношения между клиентами и поставщиками.
- •18. Классы в c#. Наследование. Конструкторы родительских классов и классов потомков. Возможности изменения классом потомком методов родительского класса.
- •19. Классы в c#. Статический контроль типов и динамическое связывание. Реализация полиморфизма.
- •20. Классы в c#. Абстрактные классы. Классы без потомков.
- •21. Интерфейсы в c#. Реализация интерфейса. Преобразование к классу интерфейса. Множественное наследование. Проблемы множественного наследования.
- •22. Функциональный тип в c#. Делегаты. Делегаты как свойства классов.
16. Классы в c#. Отношения между классами. Клиенты и наследники. Отношение вложенности. Расширение клиента класса.
Два основных типа отношений между классами определены в ОО-системах. Первое отношение "клиенты и поставщики", называется часто клиентским отношением или отношением вложенности (встраивания). Второе отношение "родители и наследники" называется отношением наследования.
Определение 1. Классы А и В находятся в отношении "клиент-поставщик", если одним из полей класса В является объект класса А. Класс А называется поставщиком класса В, класс В называется клиентом класса А.
Определение 2. Классы А и В находятся в отношении "родитель - наследник", если при объявлении класса В класс А указан в качестве родительского класса. Класс А называется родителем класса В, класс В называется наследником класса А.
Рассмотрим два класса A и B, связанных отношением вложенности.
public class ClassA
{...}
public class ClassB
{ClassA inner;
public void MethodB1()
{
inner.MethodA();
}
}
Возможна ситуация, когда метод клиентского класса локально создает объект поставщика, вызывает его методы в собственных целях, но по завершении метода локальный объект заканчивает свою жизнь. Еще одна возможная ситуация - когда объекты поставщика вообще не создаются ни конструктором, ни методами класса клиента, но клиент вызывает статические методы класса поставщика. Оба эти варианта демонстрируют следующие два метода класса B:
public void MethodB2()
{
ClassA loc = new ClassA("локальный объект А",77);
loc.MethodA();
}
public void MethodB3()
{
ClassA.StatMethodA();
}
Дадим теперь расширенное определение клиента.
Определение 3. Класс B называется клиентом класса A, если в классе B создаются объекты класса A - поля или локальные переменные - или вызываются статические поля или методы класса A.
17. Классы в c#. Отношения между классами. Отношения между клиентами и поставщиками.
Класс-поставщик интересен клиентам своей открытой частью, составляющей интерфейс класса. Но большая часть класса может быть закрыта для клиентов - им незачем вникать в детали представления и в детали реализации. Сокрытие информации вовсе не означает, что разработчики класса не должны быть знакомы с тем, как все реализовано, хотя иногда и такая цель преследуется. В общем случае сокрытие означает, что классы-клиенты строят свою реализацию, основываясь только на интерфейсной части класса-поставщика. Поставщик закрывает поля и часть методов класса от клиентов, задавая для них атрибут доступа private или protected.
public void TestClientSupplier()
{
ClassB objB = new ClassB("AA",22, "BB",33);
objB.MethodB1();
objB.MethodB2();
objB.MethodB3();
}
18. Классы в c#. Наследование. Конструкторы родительских классов и классов потомков. Возможности изменения классом потомком методов родительского класса.
Мощь ООП основана на наследовании. Когда построен полезный класс, то он может многократно использоваться. Повторное использование - это одна из главных целей ООП. Но и для хороших классов неизбежно наступает момент, когда необходимо расширить возможности класса, придать ему новую функциональность, изменить интерфейс.
Вызов конструктора - потомка приводит к цепочке вызовов конструкторов - предков, заканчивающейся вызовом конструктора прародителя. Затем в обратном порядке создаются объекты, начиная с объекта прародителя, и выполняются тела соответствующих конструкторов, инициализирующие поля и выполняющие другую работу этих конструкторов. Последним создается объект потомка и выполняется тело конструктора потомка.
public Derived() {}
public Derived(string name, int cred, int deb):base (name,cred)
{
debet = deb;
}
Потомок может создать новый собственный метод с именем, отличным от имен наследуемых методов.
В отличие от неизменяемых полей классов - предков, класс - потомок может изменять наследуемые им методы. Если потомок создает метод с именем, совпадающим с именем метода предков, то возможны три ситуации:
• перегрузка метода. Она возникает, когда сигнатура создаваемого метода отличается от сигнатуры наследуемых методов предков. В этом случае в классе потомка будет несколько перегруженных методов с одним именем, и вызов нужного метода определяется обычными правилами перегрузки методов;
• переопределение метода. Метод родителя в этом случае должен иметь модификатор virtual или abstract. Эта наиболее интересная ситуация подробно будет рассмотрена в следующих разделах нашей лекции. При переопределении сохраняется сигнатура и модификаторы доступа наследуемого метода;
• Метод потомка, скрывающий метод родителя, следует сопровождать модификатором new, указывающим на новый метод.
new public void Analysis()
{
base.Analysis();
Console.WriteLine("Сложный анализ");
}