Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП все ответы.doc
Скачиваний:
4
Добавлен:
28.10.2018
Размер:
312.83 Кб
Скачать

57. Яп с#. Наследование. Абстрактные классы.

Наследованием наз заимствование полей и методов одного кл, называемого базовым (родителем) другим кл-м, называемым производным (потомком). Насл-е упрощает логику кода, позволяет избежать многих ошибок, позволяет многократно использовать уже написанный код. Насл-е позволяет создавать новые кл, кот-е повторно используют, расширяют и изменяют поведение, определенное в других кл. Производный кл может иметь только один прямой базовый кл. Тем не менее насл-е явл-ся транзитивным. Если ClassC явл-ся производным от ClassB и ClassB явл-ся производным от ClassA, ClassC наследует члены, объявленные в ClassB и ClassA.

Единичное насл-е: class A { //базовый класс int a;

Public A() {...}

public void F() {...} }

class B : A {

// подкласс (наследует св-ва кл A,

// расширяет класс A)

int b;

public B() {...}

public void G() {...} }

Синтаксис насл-я:

class

имя_класса_потомка:имя_базового_класса{ // тело класса }

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

Отличия насл-я C# от С++:

1) В кач-ве базового кл при наслед-и м б указан только один кл. Это озн-ет, что в C# нет механизма множест-го насл-я. Если же необходимо всё-таки выполнить его то тогда можно воспользоваться понятием интерфейса.

2) При наслед-и не указываются спецификаторы доступа как в C++.

Виды насл-я: 1) насл-е is-a (классическое ) и 2) has-a (включение-делегирование).

Классическое (is-a) насл-е. Закл-ся в след-м: на основе сущ-их кл-в можно создавать новые, более совершенные кл, добавляя новые поля, методы и св-ва.

has-a (включение-делегирование) насл-е. Здесь нет иерархической стр-ры. Суть насл-я закл-ся в том, что один кл поглощает другой. Насл-е такого типа имеет смысл только в сложных кл, в кот-х такое разбиение на части может упростить код. Такое нсл-е - использование одного кл в другом.

Запрет насл-я. Это делается для избегания возможных ошибок. Для запрета насл-я кл достаточно добавить к его описанию слово sealed: public sealed class Worker:

Man{ ... }

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

Пр: using System;

Abstract public class Window{

Public Window(int top, int left);{…}

Abstract public

Void Draw Window();…..}

Public class ListBox:Window{

Public ListBox(int top,int left,string cotecst): base(top,left)//вызов кон-ра нашего класса

List Box.Contenst=contenys;}

Public override{

Void Draw Window(){….}…..}

Public class Tester

{static Void main(){

Window[] winArray=new Window[3];

WinArray[0]=new listBox(1.2.”Hello”);

…. For(int i=0, i<0,i++){

Win Array[i]. Draw Window();}}}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]