русс | укр

C# - Головна
Контакти
Задайте питання...
Перегляд всіх питань


Простір імен
  ► System (5)
  ► Microsoft (1)


Для учнів (початківців)
  ► Відео уроки (4)
  ► Навчання (177)
  ► Приклади програм (19)
  ► Секрети Сі Шарп (4)

Для професіоналів
  ► Навчання (6)
  ► Приклади програм (1)










Абстрактні класи 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. Зверніть увагу, що посилання на абстрактний клас ми можемо створити, а примірник — ні. Далі ми виводимо на екран периметр і площу для наших фігур.


Переглядів: 4924






© 2012 ci-sharp.ru При використанні матеріалу пряме iндексуюче посилання на сайт ОБОВ'ЯЗКОВЕ.
Права строго захищені нормами міжнародного права, інтелектуальної власності та авторського права.