Текущий архив: 2006.04.09;
Скачать: CL | DM;
ВнизКак пользоваться интерфейсом? Найти похожие ветки
← →
Kolan © (2006-03-26 22:35) [0]Здравствуйте,
Что такое интерфейс я разобрался. Это как бы контракт, который обязуется выполнить класс.
IControl = interface
procedure Drive;
end;
TCar = class(TInterfacedObject, IControl)
procedure Drive;
end;
Как теперь воспользоваться преимуществами интерфейса? Допустим у меня было бы их два, как предоставить только один из них?
← →
Джо © (2006-03-26 23:13) [1]Смотря, что тебя интересует. Вот различные примеры.
IJumper = interface
procedure Jump;
end;
IDiver = interface
procedure Dive;
end;
TSomething = class(TInterfacedObject, IJumper, IDiver)
procedure Jump;
procedure Dive;
end;
...
var
Jumper: IJumper;
Diver: IDiver;
...
Jumper := TSomething.Create;
Jumper.Jump;
Swimmer := TSomething.Create;
Swimmer.Swim;
или
Jumper := TSomething.Create;
Jumper.Jump;
if Jumper.QueryInterface (ISwimmer, Swimmer) = 0 then
Swimmer.Swim;
или
Swimmer := Jumper as Swimmer; // будет Exception во время исполнения, если интерфейс не поддерживается
← →
Джо © (2006-03-26 23:14) [2]Тю, сплошные опечатки. Swimmer = Diver по всему тексту, впрочем, наверное и так понятно, что я имел в виду.
← →
Kolan © (2006-03-26 23:55) [3]О большое благодарю :) А я ума не приложу...
Добавлю свой пример, заодно провери правильно ли я разобрался :)
Создаем 1 экз. TCar. И разным интерфейсам его назначаю.procedure TForm1.FormCreate(Sender: TObject);
begin
FCar := TCar.Create;
FIControl := FCar;
FIDemage := FCar;
end;
Теперь пользую интерфейсы:procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FIControl.Drive;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
FIDemage.Break;
end;
Вроде все как божий день стало ясно :)
Еще раз благодарю.
Страницы: 1 вся ветка
Текущий архив: 2006.04.09;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.011 c