- •Объектно-ориентированное программирование
- •1. Классы и объекты в ооп.
- •2. Абстрагирование в ооп.
- •3. Инкапсуляция в ооп.
- •4. Наследование в ооп.
- •5. Полиморфизм в ооп.
- •6. Описание классов с с#.
- •7. Модификаторы доступа к компонентам классов в с#.
- •8. Статические компоненты класса в c#
- •9. Способы достижения инкапсуляции в c#.
- •10. Свойства классов в c#
- •11. Конструкторы классов в c#. Порядок вызова конструкторов.
- •12. Использование ключевого слова this в c#.
- •13. Передача параметров методов в c#
- •14. Структурные (value-based) и ссылочные (reference-based) типы.
- •15. Перечисляемые типы в c#.
- •16. Перегрузка операторов в c#.
- •17. Исключительные ситуации в c#.
- •18. Способы обработки ошибок.
- •19. Платформа .Net: основные компоненты в c#.
- •20. Механизмы управления памятью в c#
- •21. Наследование в c#
- •22. Классы, закрытые для наследования в c#
- •23. Модификатор new в c#
- •24.Полиморфизм в c#.
- •25. Виртуальные и невиртуальные методы в c#.
- •26. Приведение и проверка типов в c#.
- •27. Абстрактные классы в c#.
- •28. Интерфейсы в с#.
- •29. Виды массивов в c#.
- •30. Пользователькие индексаторы в c#.
22. Классы, закрытые для наследования в c#
В C# существует возможность создать классы наследование от которых невозможно. Делается это при помощи ключевого слова sealed (запечатанный).
public sealed class SealedClass
{…}
Структурные типы данных объявлены sealed неявно, явное объявление структуры как sealed является ошибкой.
23. Модификатор new в c#
В производных классах могут быть определены свои поля, методы, свойства и вложенные типы. При создании объектов производных классов они будут доступны наравне с полями, методами и т.д. базового класса.
public class First
{public void f1() {…}}
public class Second:First
{public void f2() {…}}
Second s1 = new Second();
s1.f2();
s1.f1();
Иногда может возникнуть необходимость в производном классе переопределять какое-либо поле, метод или вложенное описание типа.
public class First
{public void f1(){…}}
public class Second:First
{new public void f1() {…}}
В этом случае в производном классе объявление метода происходит с помощью модификатора new.
Более того, использование модификатора new актуально только в тех случаях, если компонент в базовом и производном классе явл. открытым. раммирования клаа - это ми объектов. решаемых задач и требуемой степенью детализации. угих классов.мма. мы; этап
24.Полиморфизм в c#.
Полиморфизм – это когда нечто одно имеет много форм. В программировании - это возможность по интерпретации связанных объектов одинаковым образом с одной стороны и способность динамически вызывать методы объектов классов, основываясь на их типе. В программировании существуют 2 типа полиморфизма: 1) для конкретного случая (ad hoc) – полиморфные объекты никак не связаны с синтаксическими конструкциями. Такой тип полиморфизма используется в ЯП, которые не поддерживают классическое наследование (VB, VB.NET). Полиморфизм достигается за счет объявления у разных классов методов с одинаковой сигнатурой (заголовком). Для реализации такого полиморфизма необходима поддержка позднего связывания. Позднее связывание – тип объектов определяется в момент выполнения программы, в отличие от раннего связывания – тип объекта определяется на этапе компиляции. Иногда используется и динамическое связывание. Пример: Lexus и ВАЗ-2110. 2) Классический полиморфизм м.б. реализован в тех ЯП, которые поддерживают классическое наследование. В этом случае возможности производных классов определяются при описании класса, а затем реализация методов перекрываются в потомках. При этом вариант метода, который будет вызван, определяется автоматическим механизмом.
Public class Square
{ protected int side=2;
Public int Area()
{return side*side;}
Public void Print()
{ConsoleWriteline(“S={0}”, Area());}
}}
Public class Cube:Square
{new public int Area()
{return 6*side*side;}
}
Square s = new Square();
S.Print();
Cube c = new Cube();
c.Print();
Результаты: s=4, s=4.
Любой вызов функции – передача управления по какому-либо адресу. В функции Print() адрес перехода на функцию Area вычисляется в момент компиляции и естественно, это адрес функции из этого же класса.