logo search
C#, 320 стр

Преобразование к классу интерфейса

Создать объект класса интерфейса обычным путем с использованием конструктора и операции new нельзя. Тем не менее, можно объявить объект интерфейсного класса и связать его с настоящим объектом путем приведения (кастинга) объекта наследника к классу интерфейса. Это преобразование задается явно. Имея объект, можно вызывать методы интерфейса - даже если они закрыты в классе, для интерфейсных объектов они являются открытыми. Приведу соответствующий пример, в котором идет работа как с объектами классов Clain, ClainP, так и с объектами интерфейсного класса IProps:

public void TestClainIProps()

{

Console.WriteLine("Объект класса Clain вызывает

открытые методы!");

Clain clain = new Clain();

clain.Prop1(" свойство 1 объекта");

clain.Prop2("Владимир", 44);

Console.WriteLine("Объект класса IProps вызывает

открытые методы!");

IProps ip = (IProps)clain;

ip.Prop1("интерфейс: свойство");

ip.Prop2 ("интерфейс: свойство",77);

Console.WriteLine("Объект класса ClainP вызывает

открытые методы!");

ClainP clainp = new ClainP();

clainp.MyProp1(" свойство 1 объекта");

clainp.MyProp2("Владимир", 44);

Console.WriteLine("Объект класса IProps вызывает

закрытые методы!");

IProps ipp = (IProps)clainp;

ipp.Prop1("интерфейс: свойство");

ipp.Prop2 ("интерфейс: свойство",77);

}

Этот пример демонстрирует работу с классом, где все наследуемые методы интерфейса открыты, и с классом, закрывающим наследуемые методы интерфейса. Показано, как обертывание и кастинг позволяют добраться до закрытых методов класса. Результаты выполнения этой тестирующей процедуры приведены на рис. 19.1.

Рис. 19.1.  Наследование интерфейса. Две стратегии