Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания 1-3 C#.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
439.81 Кб
Скачать

2.2.4. Пример работы с классами

using System;

class Vehicle

{

private int passengers;//количество мест для пассажиров

private string mark; //марка

private string model; //модель

private int fuelcap; //объем двигателя

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

public Vehicle (int Pass, int Mark, int Model, int fuelCap)

{

passengers = Pass;

mark = Mark;

model = Model;

fuelcap = fuelCap;

}

//метод для изменения значений полей

public void setVehicle(int Pass, int Mark, int Model, int fuelCap)

{

passengers = Pass;

mark = Mark;

model = Model;

fuelcap = fuelCap;

}

//метод для получения значений полей

public void getVehicle()

{

return “Марка: “+mark+” Модель: ”+model+” Объем двигателя: “+fuelcap+” Количество мест для пассажиров: “+passangers;

}

}

class vehicleDemo {

public static void main()

{

Vehicle vehicle1 = new Vehicle(4,”Lada”,”Kalina”,2);

Console.WriteLine(vehicle1.getVehicle());

vehicle1.setVehicle(4,”Lada”,”2110”,2);

Console.WriteLine(vehicle1.getVehicle());

}

}

Здесь объявляется класс Vehicle, описывающий автомобиль, полями которого яляются марка, модель, объем двигателя и число мест для пассажиров. Также есть два метода setVehicle() и getVehicle(), позволяющие изменить эти поля и получить текущие значения полей соответственно. В программе создается объект vehicle1 типа Vehicle с помощью конструктора Vehicle().

2.3. Наследование

В языке С# класс, который наследуется, называется базовым. Класс, который на­следует базовый класс, называется производным. Следовательно, производный класс — это специализированная версия базового класса. В производный класс, наследующий все переменные, методы, свойства, операторы и индексаторы, определенные в базо­вом классе, могут быть добавлены уникальные элементы.

С# поддерживает наследование, позволяя в объявление класса встраивать другой класс. Это реализуется посредством задания базового класса при объявлении произ­водного.

Общая форма объявления класса, который наследует базовый класс, имеет такой вид:

class <имя_производ_класса> : <имя_базового_класса>

{

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

}

Рассмотрим класс TwoDShape, в котором оп­ределяются атрибуты "обобщенной" двумерной геометрической фигуры {например, квадрата, прямоугольника, треугольника и т.д.).

// Класс двумерных объектов

class TwoDShape

{

public double width;

public double height;

public void showDim()

{

Console.WriteLine("Ширина и высота равны " + width + " и " + height);

}

}

Класс TwoDShape можно использовать в качестве базового (т.е. как стартовую площадку) для классов, которые описывают специфические типы двумерных объек­тов. Например, в следующей программе класс TwoDShape используется для выведения класса Triangle.

// Простая иерархия классов.

using System;

// Класс двумерных объектов.

class TwoDShape {

public double width;

public double height;

public void showDim()

{

Console.WriteLine("Ширина и высота равны " + width + " и " + height);

}

}

// Класс Triangle выводится из класса TwoDShape

class Triangle : TwoDShape

{

public string style; // Тип треугольника.

// Метод возвращает площадь треугольника,

public double area()

{

return width * height / 2;

}

// Отображаем тип треугольника,

public void showStyle()

{

Console.WriteLine("Треугольник " + style);

}

}

class Shapes {

public static void Main()

{

Triangle tl = new Triangle();

Triangle t2 = new Triangle();

tl.width = 4.0;

tl.height = 4.0;

tl.style = "равнобедренный";

t2.width = 8.0;

t2.height = 12.0;

t2.style = "прямоугольный";

Console.WriteLine("Информация о tl: ");

tl.showStyle() ; tl.showDim();

Console.WriteLine("Площадь равна " + tl.area()); Console.WriteLine();

Console.WriteLine("Информация о t2: "); t2.showStyle() ; t2.showDim();

Console.WriteLine("Площадь равна " + t2.area());

}

}

Вот результаты работы этой программы.

Информация о t1: Треугольник равнобедренный Ширина и высота равны 4 и 4 Площадь равна 8

Информация о t2: Треугольник прямоугольный Ширина и высота равны 8 и 12 Площадь равна 48

В классе Triangle создается специфический тип объекта класса TwoDShape, в данном случае треугольник. Класс Triangle содержит все элементы класса TwoDShape и, кроме того, поле style, метод area() и метод showStyle(). В пере­менной style хранится описание типа треугольника, метод area о вычисляет и воз­вращает его площадь, а метод showStyle() отображает данные о типе треугольника.

Несмотря на то что класс TwoDShape является базовым для класса Triangle, это совершенно независимый и автономный класс. То, что его использует в качестве ба­зового производный класс (классы), не означает невозможность использования его самого. Безусловно, объект класса TwoDShape "ничего не знает" и не имеет права доступа К классу, производному от TwoDShape.

Для создаваемого производного класса можно указать только один базовый класс. В С# (в отличие от С++) не поддерживается наследование нескольких базовых клас­сов в одном производном классе. Однако можно создать иерархию наследования, в которой один производный класс становится базовым для другого производного класса. И конечно же, ни один класс не может быть базовым (ни прямо, ни косвенно) для самого себя.