русс | укр

C# - Главная
Контакты
Задайте вопрос...
Просмотр всех вопросов


Пространство имен
  ► System
  ► Microsoft


Для учеников (начинающих)
  ► Видео уроки
  ► Обучение
  ► Примеры программ
  ► Секреты в Си Шарп

Для профессионалов
  ► Обучение
  ► Примеры программ
  ► Задачки - для тебя!










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

Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Абстрактные методы пишутся с модификатором abstract. Класс, в котором есть хотя бы

один абстрактный метод, называется абстрактным (в таком классе могут быть и обычные методы). Нельзя создавать экземпляры абстрактного класса — такой класс может использоваться только в качестве базового класса для других классов. Для потомка такого класса есть две возможности — или он реализует все абстрактные методы базового класса (и в этом случае для такого класса-потомка мы сможем создавать его экземпляры), или реализует не все абстрактные методы базового класса (в этом случае он является тоже абстрактным классом, и единственная возможность его использования — это производить от него классы потомки). Вот пример, иллюстрирующий использование абстрактных

классов:

using System;

namespace test

{

abstract class Figure

{

//Площадь фигуры

public abstract double square();

public abstract double perimeter();

}

class Triangle: Figure

108 Раздел I I . Фундаментальные понятия

double а, Ь, с; //Стороны

//Конструктор

public Triangle (double a, double b, double с)

{

this.a=a;

this .b=-b;

this.c=c;

I

public override double square()

{

//Используем формулу Герока

double p - (aib+c)/2;

return Math.Sqrt(p*(p-a)* (p-b)* (p-c));

I

public override double perimeter()

i

return a-ib+c;

class Rectangle: Figure

{

double a, b; //Стороны

//Конструктор

public Rectangle(double a, double b)

{

this.a=a;

this.b=b;

}

public override double squared

{

return a*b;

}

public override double perimeter!)

!

return (afb)*2;

}

}

class Test

{

public static void Main()

t

Figure fl, f2;

fl=new Triangle(3, 4, 5);

f2=new Rectangle(2, 6);

System.Console.WriteLine(f1.perimeter()i", "+ f1.square()

System.Console . WriteLine (f 2 .perimeter ()•+", "+ f 2 . square ()

Результаты работы программы отобразятся как:

12, 6

16, 12

Тут мы объявляем абстрактный класс Figure, от которого производим два класса — Rectangle (класс прямоугольника) и Triangle (треугольника). В классе Figure есть два абстрактных метода — square (для подсчета площади) и perimeter (для периметра). Так как для произвольной фигуры формул для площади и для периметра не существует, то эти методы объявлены в классе Figure и переопределены в производных классах (с ключевым словом override). Далее в классе Test мы проводим испытание — заводим две переменные ссылочного типа базового класса Figure, ниже в эти ссылки мы записываем созданные экземпляры производных классов Triangle и Rectangle. Обратите внимание, что ссылку на абстрактный класс мы создать можем, а экземпляр — нет. Далее мы выводим на экран периметр и площадь для наших фигур.


Просмотров: 6207






© 2012 ci-sharp.ru При использовании материала прямая индексирующая ссылка на сайт ОБЯЗАТЕЛЬНА.
Права строго защищены нормами международного права, интеллектуальной собственности и авторского права.