Лабораторная работа №8 Создание класса-наследника при одиночном и множественном наследовании

Loading...


Дата18.10.2020
өлшемі20.31 Kb.
түріЛабораторная работа
Лабораторная работа №8

Создание класса-наследника при одиночном и множественном наследовании


Цель работы:

Познакомиться с реализацией принципа наследования на языке С#.


Теория

Наследование является одной из основных характеристик (или базовых понятий) объектно-ориентированного программирования.



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

С помощью механизма наследования производный класс наследует все свойства и поведение (все методы и свойства интерфейса базового класса автоматически появляются в интерфейсе производного класса), представленные в базовом классе, при этом позволяя их расширять и изменять.

Производный класс может иметь только один непосредственный базовый класс. Однако наследование является транзитивным. Если ClassC является производным от ClassB, и ClassB является производным от ClassA, ClassC наследует члены, объявленные в ClassB и ClassA.

Наследование применяется для следующих взаимосвязанных целей: 1) исключения из программы повторяющихся фрагментов кода; 2) упрощения модификации программы; 3) упрощения создания новых программ на основе существующих.

При описании класса имя его базового класса записывается в заголовке класса после двоеточия (если имя предка не указано, предком считается базовый класс всей иерархии System.Object):

[уровень доступа] class <имя производного класса>:<имя базового класса >

{

// Описание членов класса

}

Поля, методы и свойства класса наследуются, поэтому при желании заменить элемент базового класса новым элементом следует явным образом указать компилятору свое намерение с помощью ключевого слова new. Соответственно синтаксис для полей, свойств и методов выглядит следующим образом:

new <уровень доступа> <тип переменной> <имя переменной>;

new <уровень доступа> <тип><имя свойства > { get { код_доступа} set { код_доступа} }

new <уровень доступа> <возвращаемый тип><имя метода > (<список параметров>){тело_метода}

Из производного класса можно получить доступ к открытым (public), защищенным (protected), внутренним (internal) и защищенным внутренним (protected internal) членам базового класса.

Хотя производный класс и наследует закрытые члены базового класса, он не может получить доступ к этим членам. Однако все эти закрытые члены все же присутствуют в производном классе и могут выполнять ту же работу, что и в самом базовом классе (например, если защищенный метод базового класса имеет доступ к закрытому полю, то это поле должно присутствовать в производном классе для правильной работы унаследованного метода базового класса).

Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Порядок вызова конструкторов определяется приведенными далее правилами:


  1. Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, автоматически вызывается конструктор базового класса без параметров.

  2. Для иерархии, состоящей из нескольких уровней, конструкторы базовых классов вызываются, начиная с самого верхнего уровня. После этого выполняются конструкторы тех элементов класса, которые являются объектами, в порядке их объявления в классе, а затем исполняется конструктор класса. Таким образом, каждый конструктор инициализирует свою часть объекта.

  3. Если конструктор базового класса требует указания параметров, он должен быть явным образом вызван в конструкторе производного класса в списке инициализации. Вызов выполняется с помощью ключевого слова base. Вызывается та версия конструктора, список параметров которой соответствует списку аргументов, указанных после слова base.

Пример 5.1 Наследование ()



Задание.
Создайте два класса:

«Shape» (базовый класс), предназначенный для создания на своей основе классов любых геометрических фигур, и обеспечивающий возможность чтения и записи их наименования.



«Rectangle» (производный класс), предназначенный для описания состояния и поведения прямоугольников как геометрических фигур.
Решение.
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;
namespace MyConsoleApplication

{

// Объявление класса <Фигура>

public class Shape

{

// Члены класса:

// Поля.

protected string FName;

protected int FSideA;

protected int FSideB;



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

public Shape(string Name, int SideA, int SideB)

{

FSideA = SideA; FSideB = SideB; this.Name = Name;

}
// Свойства

public string Name //Наименование фигуры

{

set { FName = value + " (неопределенная фигура)"; }

get { return FName; }

}

}
public class Rectangle : Shape

{

// Члены класса:
// Конструкторы

public Rectangle(string Name, int SideA, int SideB): base(Name,SideA,SideB){}
// Свойства

public int Perimeter // свойство, дополняющее элементы базового класса

{

get { return (FSideA + FSideB) * 2; }

}

// Свойства

new public string Name // свойство, заменяющее элемент базового класса

{

set { FName = value + " (прямоугольник)"; }

get { return FName; }

}

}
class Program

{

static void Main(string[] args)

{
// Создание объекта на основе класса Rectangle (Большой прямоугольник со сторонами 5 и 10)

Rectangle myRectangle = new Rectangle("Большой прямоугольник", 5, 10);
// Выведем свойства фигуры

// имя

Console.WriteLine(myRectangle.Name);

// значение периметра

Console.WriteLine(myRectangle.Perimeter);

Console.ReadKey();
}

}

}



Задание для самостоятельной работы

  1. Используя решение заданий, приведенных в лабораторных работах №7, создайте один базовый класс и несколько (не менее двух) производных классов

  2. Создайте экземпляры производных классов и продемонстрируйте их работу


Контрольные вопросы

  1. Что такое наследование?

  2. Для каких целей применяют наследование?

  3. Какие члены класса наследуются?

  4. Какие члены класса не наследуются?

  5. Каков порядок вызова конструкторов при наследовании?


Достарыңызбен бөлісу:
Loading...


©melimde.com 2020
әкімшілігінің қараңыз

    Басты бет
рсетілетін ызмет
Жалпы ережелер
ызмет стандарты
дістемелік кешені
бекіту туралы
туралы хабарландыру
біліктілік талаптары
кіміні аппараты
Конкурс туралы
жалпы біліктілік
ойылатын жалпы
мемлекеттік кімшілік
бойынша жиынты
жалпы конкурс
білім беретін
Барлы конкурс
республикасы білім
ызмет регламенті
ткізу туралы
конкурс атысушыларына
біліктілік талаптар
атысушыларына арнал
Республикасы кіметіні
идаларын бекіту
облысы кімдігіні
рсетілетін ызметтер
мемлекеттік ызмет
дістемелік сыныстар
Конкурс ткізу
стандарттарын бекіту
мемлекеттік мекемесі
Мектепке дейінгі
дебиеті маманды
дістемелік материалдар
білім беруді
жалпы білім
ауданы кіміні
конкурс туралы
мектепке дейінгі
рметті студент
облысы бойынша
мерзімді жоспар
мыссыз азаматтар
Мемлекеттік кірістер
Конкурс жариялайды
дарламасыны титулды
дістемелік кешен
ызметтер стандарттарын
разрядты спортшы
мелетке толма
директоры бдиев

Loading...