louis vuitton bag moncler jacka ugg boots mbt sko louis vuitton oslo moncler ugg www.steklo1.ru
   Поиск
 

Изучаем C Sharp (C#)

Программирование на C Sharp (C#) с нуля

Cи Шарп это просто Simple C#
Логин Пароль Вход Регистрация
Главная
Изучаем C#
Web-приложения
Win-приложения
Web-сервисы
ADO.NET
FrameWork
Алгоритмы
Исходники
Классы
Среда разработки
Статьи
Форум
FAQ
О Проекте
Обратная связь
Отблагодарить
Rambler's Top100

Введение в классы - Абстрактные классы (часть 12)

АБСТРАКТНЫЕ КЛАССЫ


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


using System;

namespace test
{
abstract class Figure
{
    //Площадь фигуры
    public abstract double square();
    public abstract double perimeter();
}
class Triangle: Figure
{
    double а, Ь, с; //Стороны
    //Конструктор
    public Triangle (double a, double b, double с)
    {
        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 squared()
    {
        return i=a*b;
    }
    public override double perimeter()
    {
        return (a*b)*2;
    }
}

class Test
{
    public static void Main()
    {
        Figure fl, 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());
    }
}
}



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

Предыдущая стр.    Оглавление    Следующая стр.
Средняя оценка: (3,5 - 6 голосов)
Для оценки необходимо зарегистрироваться


Только зарегистрировавшиеся пользователи могут оставлять комментарии

Комментирует Sanek1985 02.03.2010 0:55:37
Тут море ошибок. Кому интересно отвечу на 379785 собака рамблер . ру

Комментирует james 02.03.2010 8:52:11
Я заметил только опечатки (знаки в формулах) в вычислении площади и периметра. Логика темы вся верная.

Комментирует sim 06.03.2010 21:02:45
В статье много опечаток, и, исправляя их, лично я лучше усвоил материал. Создаётся впечатление, что автор их специально допускает, чтобы читающие хоть немного думали головой ;)

Комментирует ASVERUS 08.01.2011 12:19:02
17 ошибок дайте ссылку на нормальный ресурс

Комментирует SHPION 10.01.2011 8:31:13
АААААА!!!! Мой бедный мозг.... Поделитесь травой.

Комментирует snork 03.02.2011 12:29:37


Комментирует veter 06.03.2011 21:52:44
без паники гаспада, тут только 3 ошипки 1)в определении полей класа триангл меняем мягкий знак на b 2)в описании класса ректангл public override double squared() в имени метода убираем букву d 3)в мейн теле, в определении типов fl(фл) меняем на f1 и всьо пучком

Комментирует oigen90 27.11.2011 15:48:26
Вы что, совсем идиоты, чтобы копипастить примеры кода?! А самим писать, не? Чему вы научитесь? тыцканью 'Ctrl + C' - 'Ctrl + V'??? 2 Автор: Просматриваю твои уроки - все шикарно, но только для людей, которые имеют опыт в другом языке и хотят познать азы C#, либо же для си-шарпистов, которые давно не работали и надо "по-шурику" вспомнить все. Лично я почти не читаю описания, просто просматриваю куски кода, для того, чтобы понять что такое абстрактный класс, например. По описанию только вскользь пробегаюсь. Для людей, знающих ООП все вполне понятно. Вот только почему-то я так и не понял что такое интерфейс. Похоже это что-то подобное протоколу в Objective-C или категории в Ruby. Это так? Т.е. подобие класса, который имеет методы, которые можно "подключить" к стороннему классу и решить проблему множественного наследования? Ответь, пжлст. 2 Читатели: Если совсем начинающие, то попробуйте посмотреть скринкасты (видеоуроки). Если понимаете английский язык (не можете говорить и знаете на "пятёрочку", а просто понимаете и не боитесь), то могу даже порекомендовать уроки. Самое шикарное, что я видел - это скринкасты компании Lynda.com

Комментирует oigen90 27.11.2011 16:14:47
Автор, у тебя что, сайт сверстан таблицами, да еще и со встроенными стилями?..



Практический обучающий видео-курс "Основы C#"

От профессионального
разработчика для начинающих
и опытных программистов!

Кликните, чтобы изучить
язык C# с нуля и научиться
писать программы под платформу .NET!

evening dresses