- •Объектно-ориентированное программирование
- •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#.
25. Виртуальные и невиртуальные методы в c#.
Функция объявляется виртуальной в базовом классе с помощью модификатора virtual. Если для производного класса требуется переопределить свой вариант данной функции, то используется ключевое слово override. Синтаксической ошибкой является одновременное использование обоих модификаторов. Ошибкой является одновременное использование модификаторов new и override.
Public class Square
{protected int side=2;
Virtual public int Area();
{return side*side;}
Public void Print()
{Console.Writeline (“S={0}”, Area());}}
Public class Cube:Square
{override public int Area()
{return 6*side*side;}}}
Square S= new Square();
s.Print();
Cube c = new Cube();
c.Print();
Результат: s=4; s=4.
Если метод не виртуальный, будет вызван вариант метода, соотв. типу объявленной переменной. Либо типу объекта, к которому приводится данный. Если метод объявлен виртуальным и в потомках переопределен, то вызовется метод, соотв. типу созданного объекта.
+ Square s1 = new Square();
+ Square s2 = new Cube();
- Cube c1 = new Cube();
- Cube c2 = new Square();
Console.Writeline(…);
S1.Area() new (4); virtual/override(4)
S2.Area() new (4); virtual/override(24)
C1.Area() new (24); virtual/override(24)
(Square(c1)).Area(); new (4); virtual/override(24)
26. Приведение и проверка типов в c#.
Для проверки принадлежности объекта к какому-либо типу используется параметр is. Синтаксис записи следующий: <выражение> is <тип>. Результатом является либо true, либо false.
if (s1 is Cube)
Console.Writeline(“yes”);
else Console.Writeline(“no”); результат: “no”
if (s2 is Cube) результат: “yes”
if (s2 is Square) результат: “yes”
if (s2 is Square результат: “yes”
Приведение типов доступно в C#. Различают неявное (implicit) и явное (explicit) приведение типов (type-cast(ing)). Неявное приведение: автоматически:
Int i = 78;
Long l = I;
i неявно переводится к типу long, т.к. long охватывает большое число значений.
Явное приведение:
Long l = 45;
Int i = (int)l;
Т.к. int более короткий, чем long.
Class Overl
{Public void f(int I, long l) {}
Public void f(long l, int i) {}}
Overl O = new Overl();
Int i1=14, i2=24;
O.f(i1,i2); - ошибка
O.f((long)i1,i2); - 2-ой метод
O.f(i1,i2); - 1-ый метод
Для структурных типов – это единственный способ приведения. Этот же способ работает и для ссылочных типов. Для ссылочных типов существует еще один способ. Это использование оператора as.
C1 as Square = (Square) c1
Различия есть: 1) (Cube) s1; 2) s1 as Cube
(Cube)s1 – s1 не является объектом Cube. В первом случае возникает исключительная ситуация System.InvalidCasеException. Оператор as действует по другому: сначала выполняется проверка на соответствие типов, т.е. вызывается оператор is. Если тип преобразовать невозможно, исключение не возникает, а результатом будет нулевая ссылка null.