Работа с массивом объектов базового класса Figure — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Работа с массивом объектов базового класса Figure

2018-01-29 251
Работа с массивом объектов базового класса Figure 0.00 из 5.00 0 оценок
Заказать работу

//В Main():

Figure[ ] mas = new Figure[4];

//mas[0] – ссылка на объект базового класса:

mas[0] = new Figure(15, 73);

//mas[1] – ссылка на объект базового класса и т.д.:

mas[1] = new Triangle(3, 4, 5);

mas[2] = new Rectangle(10, 7);

mas[3] = new Kwadrat(18);

for (int i = 0; i < mas.Length; i++)

Console.WriteLine("Площадь фигуры с номером "+i+"="+mas[i].area());

Здесь конкретный тип объекта (mas[i]) определяется во время работы цикла – динамический полиморфизм.

 

Задание: Самостоятельно разработать класс Circle и в нём переопределить методы area() и perimetr().

Абстрактные классы

Иногда создают базовый класс, определяющий своего рода пустой бланк. Производные классы этого базового класса должны заполнять «бланк» своей информацией. Такой класс не обеспечивает реализацию одного или нескольких методов. Он просто заявляет о том, что будет метод с таким-то интерфейсом. Производные классы нужно заставить переопределять такие, не имеющие никакого смысла, методы. Для этого и служат абстрактные методы.

Формат записи абстрактного метода:

public abstract Тип_возвращаемого_значения Имя_метода(Список параметров);

Абстрактный метод не содержит тело и, следовательно, не реализуется базовым классом, поэтому производный класс должен его переопределить. Абстрактный метод автоматически является виртуальным, поэтому слово virtual в его заголовке писать не надо.

Примечание 1: Модификатор abstract используется только для обычных методов, а не для static-методов.

Примечание 2: Свойства так же могут быть абстрактными.

Примечание 3: Класс, содержащий один или несколько абстрактных методов, должен быть объявлен как абстрактный:

abstract class My_Class

{

//тело класса

}

Примечание 4: Нельзя создавать объекты абстрактного класса, так как он полностью нереализуем.

Примечание 5: Можно объявить класс со словом abstract, а его некоторые методы объявить не абстрактными, а виртуальными. Такой подход более гибкий, так как производные классы могут не переопределять виртуальные методы.

Задание: В проекте «Наследование» класс Figure объявить как абстрактный и выполнить проект. Произойдёт ошибка, так как в массиве объектов имеется объект класса Figure (mas[0]),а его нельзя создавать.

abstract class Figure

{

//методы/свойства

}

Класс System.Object. Переопределение некоторых его методов

В С# класс System.Object является неявным базовым классом для всех других классов, включая встроенные типы. Это значит, что переменная типа оbject может указывать на объект любого типа. В этом классе имеется метод Equals(…), который определяет, являются ли ссылки двух сравниваемых объектов одинаковыми. Если в пользовательском классе, например в Point, перегружены операции == и!=, то нужно обязательно переопределять метод Equals(…).

 

Задание: В классе Point проекта «Планиметрия» переопределить метод Equals(…).

 

рublic override bool Equals(object Ob)

{

if (Obj==null ||!Ob is Point)

//Если ссылка нулевая или Оb не является объектом класса Point

return false;

else

return

this == (Point)Ob; /*сравнение ссылок на ==объекта, вызывающего метод и объекта-параметра Ob. Но параметр Ob имеет тип оbject, значит его нужно явно привести к типу Point. */

}

В классе Оbject имеется метод ToString(), который возвращает строку, описывающую объект. Он автоматически вызывается при выводе объекта на экран с помощью метода WriteLine(). Если в пользовательском классе переопределен метод Equals(…), то нужно переопределить и метод GetHashCode(). Роль этого метода – возвратить длинное целое число, которое идентифицирует объект в оперативной памяти.

Длинное целое число нужно превратить в строку. Метод ToString() класса Object часто применяют при выводе значений на экран с помощью метода WriteLine().

Задание: В классе Point проекта «Планиметрия» переопределить метод GetHashCode().

//В классе Point:

рublic override bool GetHashCode()

{

return ToString().GetHashCode();

}

 

//В Main():

if (T1==T2)

ConsoleWriteLine(“Точки равны”)

else

ConsoleWriteLine(“Точки не равны”);

 

ConsoleWriteLine(“Хеш-код точки T1=”+T1. GetHashCode());

ConsoleWriteLine(“Хеш-код точки T2=”+T2. GetHashCode());


Поделиться с друзьями:

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.