Абстрактные классы
Конструктор сайтов - uCoz
Меню сайта


Поиск по сайту
Loading


Форма входа


Помощь проекту

PayPal:

LiqPay or Credit/Debit Card:

W1 "Единый кошелек":
199990419310
WebMoney:
WME - E509190786817
WMZ - Z195499640086
WMU - U204403357554
WMR - R280087882619




Активные темы

  • Все вопросы касающиеся Neil Scope (6444)
  • Заказ плат под NeilScope3 (12.2015) (59)
  • Первое знакомство с микроконтроллерами Silabs (105)
  • инвертор на микропроцессоре с 12\220v с синусом на выходе (2)
  • Куплю плату NS-3 (0)
  • Подскажите (0)
  • Осваиваем LPC2478... (1)
  • Мелкие вопросы по МК51 от SiLabs-a.. (40)
  • Детали для Neil Scope 2 (0)
  • NeiLogicAnalyzer (47)



  • Статистика

    Онлайн всего: 2
    Гостей: 2
    Пользователей: 0



    Рекомендуемые браузеры: Mozzilla, Google Chrome






    Приветствую Вас, Пробегающий мимо · RSS 18.11.2017, 19:28

    Основы C#. Урок 19. Абстрактные классы

    Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Абстрактные методы пишутся с модификатором abstract. Класс, в котором есть хотя бы один абстрактный метод, называется абстрактным (а таком классе могу быть и обычные методы). Нельзя создавать экземпляры абстрактного класса - такой класс может использоваться только в качестве базового класса для других классов. Для потомка такого класса есть две возможности - или он реализует все абстрактные методы базового класса (и в этом случае для такого класса-потомка мы сможем создавать его экземпляры), или он реализует не все абстрактные методы базового класса (в этом случае он является тоже абстрактным классом и единственная возможность его использования - это производить от него классы-потомки). Вот пример, иллюстрирующий использование абстрактных классов:

    using System;
    namespace test
    {
     abstract class Figure
     {
     //Площадь фигуры
     public abstract double square();
     public abstract double perimeter();
     }
     class Triangle: Figure
     {
     double a, b, c; //Стороны
     //Конструктор
     public Triangle(double a, double b, double c)
     {
     this.a=a;
     this.b=b;
     this.c=c;
     }
     public override double square()
     {
     //Используем формулу Герона
     double p = (a+b+c)/2;
     return Math.Sqrt(p*(p-a)*(p-b)*(p-c));
     }
     public override double perimeter()
     {
     return a+b+c;
     }
     }
     class Rectangle: Figure
     {
     double a, b; //Стороны
     //Конструктор
     public Rectangle(double a, double b)
     {
     this.a=a;
     this.b=b;
     }
     public override double square()
     {
     return a*b;
     }
     public override double perimeter()
     {
     return (a+b)*2;
     }
     }
     class Test
     {
     public static void Main()
     {
     Figure f1, f2;
     f1=new Triangle(3, 4, 5);
     f2=new Rectangle(2, 6);
     System.Console.WriteLine(f1.perimeter()+", "+ f1.square());
     System.Console.WriteLine(f2.perimeter()+", "+ f2.square());
     }
     }
    }

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