Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C#.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
10 Мб
Скачать
☆

7.Наследование и полиморфизм

7.1Основы наследования

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

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

Поддержка наследования в C# состоит в том, что в объявление одного класса разрешается вводить другой класс. Для этого при объявлении производного класса указывается базовый класс. При установке между классами отношения "является" строится зависимость между двумя или более типами классов. Базовая идея, лежащая в основе классического наследования, заключается в том, что новые классы могут создаваться с использованием существующих классов в качестве отправной точки:

using System;

namespace ConsoleApplication1

{

class ProfessorWeb

{

const string ADDR = "http:\\professorweb.ru";

public string level, inLevel;

public int numberSt;

public void InfoPW()

{

Console.WriteLine("Сайт: {0}\nРаздел: {1}\nПодраздел: {2}\n"

"Кол-во статей:{3}", ADDR, level, inLevel, numberSt);

}

}

// Объявляем класс, унаследованный от класса ProfessorWeb

class CSharp : ProfessorWeb

{

public string st;

/* Поля класса ProfessorWeb доступны через конструктор наследуемого

класса */

public CSharp(string level, string inLevel, int numberSt, string st)

{

this.level = level;

this.inLevel = inLevel;

this.numberSt = numberSt;

this.st = st;

}

public void StWrite()

{

Console.WriteLine("Статья: " + st);

}

}

class Program

{

static void Main()

{

CSharp obj = new CSharp("C#","Перегрузка", 7,

"Перегрузка методов");

obj.InfoPW();// Вызов метода родительского класса

obj.StWrite();// Вызов метода класса-наследника

Console.ReadLine();

}

}

}

Вывод программы:

Сайт: http:\professorweb.ru

Раздел: C#

Подраздел: Перегрузка

Кол-во статей:7

Статья: Перегрузка методов

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

Как видите класс CSharp получает доступ к полям и методам класса ProfessorWeb. Всегда помните, что наследование предохраняет инкапсуляцию, а потому приватные члены никогда не могут быть доступны через ссылку на объект.

Для любого производного класса можно указать только один базовый класс. В C# не предусмотрено наследование нескольких базовых классов в одном производном классе. (В этом отношении C# отличается от С++, где допускается наследование нескольких базовых классов. Данное обстоятельство следует принимать во внимание при переносе кода С++ в C#.) Тем не менее можно создать иерархию наследования, в которой производный класс становится базовым для другого производного класса. (Разумеется, ни один из классов не может быть базовым для самого себя как непосредственно, так и косвенно.) Но в любом случае производный класс наследует все члены своего базового класса, в том числе переменные экземпляра, методы, свойства и индексаторы.

Главное преимущество наследования заключается в следующем: как только будет создан базовый класс, в котором определены общие для множества объектов атрибуты, он может быть использован для создания любого числа более конкретных производных классов. А в каждом производном классе может быть точно выстроена своя собственная классификация.