Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# - все презентации / 05_C#_Отношения между класами. Нследование. Полиморфизм.ppt
Скачиваний:
61
Добавлен:
29.03.2015
Размер:
237.06 Кб
Скачать

Наследование. Примеры

public class Derived:Found

{

protected int debet;

}

public Derived() {}

public Derived(string name, int cred, int deb):base (name,cred)

{

debet = deb;

}

05. C#. Наследование. Полиморфизм

12

Добавление методов и изменение методов родителя

public void DerivedMethod()

{

Console.WriteLine("Это метод класса Derived");

}

new public void Analysis()

{

base.Analysis(); Console.WriteLine("Сложный анализ");

}

public void Analysis(int level)

{

base.Analysis();

Console.WriteLine("Анализ глубины {0}", level);

}

05. C#. Наследование. Полиморфизм

13

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

x1.M(arg1, arg2, ... argN)

Контролем типов называется проверка каждого вызова, удостоверяющая, что:

в классе A1 объекта x1 действительно имеется метод M ;

список фактических аргументов в точке вызова соответствует по числу и типам списку формальных аргументов метода M, заданного в классе A1.

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

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

05. C#. Наследование. Полиморфизм

14

Механизмы обеспечения полиморфизма

public override void VirtMethod()

{

Console.WriteLine("Сын: " + this.ToString());

}

public override string ToString()

{

return(String.Format("поля: name = {0},

credit = {1},debet ={2}",name, credit, debet));

}

public ChildDerived(string name, int cred, int deb):base (name,cred, deb)

{}

public override void VirtMethod()

{

Console.WriteLine("внук: " + this.ToString());

}

05. C#. Наследование. Полиморфизм

15

Механизмы обеспечения полиморфизма

public void Work()

{

VirtMethod();

NonVirtMethod();

Analysis();

}

public void NonVirtMethod()

{

Console.WriteLine ("Мать: "+ this.ToString());

}

05. C#. Наследование. Полиморфизм

16

Полиморфизм. Пример

public void TestFoundDerivedReal()

{

Found bs = new Found ("father", 777); Console.WriteLine("Объект bs вызывает методы класса Found"); bs.VirtMethod();

bs.NonVirtMethod();

bs.Analysis();

bs.Work();

Derived der = new Derived("child", 888, 555);

Console.WriteLine("Объект der вызывает методы класса Derived");

der.DerivedMethod();

der.VirtMethod();

der.NonVirtMethod();

der.Analysis();

der.Work();

05. C#. Наследование. Полиморфизм

17

Полиморфизм. Пример

ChildDerived chider = new ChildDerived("grandchild", 999, 444);

Console.WriteLine("Объект chider вызывает методы

ChildDerived");

chider.VirtMethod();

chider.NonVirtMethod();

chider.Analysis(5);

chider.Work();

}

05. C#. Наследование. Полиморфизм

18

Абстрактные классы

public abstract class Stack

{

public Stack() {}

///<summary> втолкнуть элемент item в стек </summary>

///<param name="item"></param>

public abstract void put(int item);

///<summary> удалить элемент в вершине стека </summary> public abstract void remove();

///<summary> прочитать элемент в вершине стека </summary> public abstract int item();

///<summary> определить, пуст ли стек </summary>

///<returns></returns>

public abstract bool IsEmpty();

}

05. C#. Наследование. Полиморфизм

19

Абстрактные классы

public class Linkable

{

public Linkable()

{ }

public int info; public Linkable next;

}

05. C#. Наследование. Полиморфизм

20

Абстрактные классы

public class ListStack: Stack

{

public ListStack()

{

top = new Linkable();

}

Linkable top;

///<summary> втолкнуть элемент item в стек </summary>

///<param name="item"></param>

public override void put(int item)

{

Linkable newitem = new Linkable(); newitem.info = item;

newitem.next = top; top = newitem;

}

05. C#. Наследование. Полиморфизм

21