Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.20;
Скачать: CL | DM;

Вниз

Интерфейсы   Найти похожие ветки 

 
IvanS   (2007-12-18 19:02) [0]

В каком случае требуется использовать (оправданное использование) интерфесов (я не говорю про COM"овские, я про обычные interface в Delphi)? Приведите пример задачи.

Спасибо.


 
Palladin ©   (2007-12-18 19:07) [1]

ну... случаев очень много... основные:
1. аналог множественного наследования
2. автоматическое освобождение объектов при выходе из области видимости переменной

смотреть нужно по ситуации...
мне они например очень пригодились при использовании RemObject Pascal Script, бо некоторые чайниканутые скриптологи совсем не задумываются об освобождении объектов...


 
Ins ©   (2007-12-18 19:28) [2]

На мой взгляд, самое элегантное - следующее применение: иногда у совсем неродственных объектов могут быть одинаковые методы и должна быть возможность единым образом их вызывать. Например, у нас такая ситуация:
TMyStrings = class(TStrings)
TMyGraphic = class(TGraphic)
Классы совершенно не родственны, но допустим, у каждого из них есть метод
procedure SaveToFile(FileName: String);
И нам нужно написать функцию, которая принимает объект любого из этих классов и сохраняет в файл:
procedure SaveObjectToFile(Obj: TObject; FileName: String);

Ее можно было бы реализовать так:
procedure SaveObjectToFile(Obj: TObject; FileName: String);
begin
 if Obj is TMyStrings then
   TMyStrings(Obj).SaveToFile(FileName);
 if Obj is TMyGraphic then
   TMyGraphic(Obj).SaveToFile(FileName);
end;

Ну а если у нас таких классов не два, а скажем, десять, или их число неограничено вовсе. Как быть тогда? Тут интерфейсы и помогут:

IMyFiler = interface
 procedure SaveToFile(FileName: String);
end;

TMyStrings = class(TStrings, IMyFiler);
TMyGraphic = class(TGraphic, IMyFiler);


А процедуру перепишем так:
procedure SaveObjectToFile(Obj: TObject; FileName: String);
var
 Intf: IMyFiler;
begin
 if Supports(Obj,IMyFiler,Intf) then Intf.SaveToFile(FileName);
end;



Страницы: 1 вся ветка

Текущий архив: 2008.01.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
2-1197971090
Terc
2007-12-18 12:44
2008.01.20
Как узнать созданли компонент ?


9-1165649515
max3d
2006-12-09 10:31
2008.01.20
Движок проблемы с реализацией


2-1197950727
Sergiu
2007-12-18 07:05
2008.01.20
Как считывать данные с COM,LPT порта и нарисовать график


15-1197964727
Alexey
2007-12-18 10:58
2008.01.20
Программы не запускаются под Win2003. Что делать?


2-1198256206
Riply
2007-12-21 19:56
2008.01.20
Безопасная загрузка библиотеки.