
- •Различия между наследующим и наследуемым классами :
- •Множественное наследование
- •Конструкторы и наследование
- •Возможны следующие ситуации: 1.
- •constr_title – стандартное начало заголовка конструктора,
- •Пример:
- •//конструктор с одним параметром
- •public void ShowFigure2 ()
- •//конструктор с тремя параметрами
- •public void ShowStyle ()
- •Доступ к переменным и методам и наследование
- •Пример:
- •//конструктор
- •class Class1

public void ShowStyle ()
{
Console.WriteLine(" Вид 4-хугольника – " + style);
}
}
//демонстрация вызова конструкторов
//наследуемого класса
class Class1
{
[STAThread]
static void Main(string[] args)
{
Figure3 t1 = new Figure3();
Figure3 t2 = new Figure3("прямоугольник", 3,4);
12

Figure3 t3 = new Figure3(2);
t1=t2;
Console.WriteLine("объект t1:");
t1.ShowStyle();
t1.ShowFigure2();
Console.WriteLine("объект t2:");
t2.ShowStyle();
t2.ShowFigure2();
Console.WriteLine("объект t3:");
t3.ShowStyle();
t3.ShowFigure2();
}
}
}
13

Доступ к переменным и методам и наследование
Скрытие переменных и методов
В наследующем классе допускается объявление переменных с теми же именами, что и в наследуемом классе.
В этом случае переменные наследуемого класса становятся недоступны для наследующего класса.
Объявление переменной содержит ключевое слово new:
new access var_type var_name;
Смысл слова new - явное указание на то, что новая переменная скрывает одноименную переменную наследуемого класса.
14

В C# предусмотрен механизм доступа к скрытым таким способом переменным.
При обращении к скрытой переменной из наследуемого класса надо снабдить ее
ключевым словом base и
операцией уточнения
(аналог this, но для наследуемого класса).
Аналогично для методов:
новый одноименный метод объявляется с ключевым словом new;
метод наследуемого класса вызывается с указанием ключевого слова base.
15

Пример:
using System;
namespace HideDemo
{
//наследуемый класс
class A
{
public int i = 0;
public void show ()
{
Console.WriteLine("значение i в классе A="+i);
}
}
//наследующий класс
class B: A
{
new private int i; //скрыли i из класса А
16

//конструктор
public B(int a, int b)
{
base.i = a; // i из класса А
i = b; // i из класса B
}
//скрываем метод из класса А
new public void show ()
{
base.show(); // метод из класса А
Console.WriteLine("значение i в классе B ="+i);
}
}
17

class Class1
{
static void Main(string [ ] args)
{
B obj = new B(1, 2);
obj.show();
}
}
}
18