Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.04 c
2-1198174004
Stepper
2007-12-20 21:06
2008.01.20
Как при сохранении данных из RichEdit - добавить к ним строку..


15-1197341960
Превед
2007-12-11 05:59
2008.01.20
А вернёт ли Медвед Путину власть?


15-1197886624
Ром__
2007-12-17 13:17
2008.01.20
тв-тюнер


15-1197918092
Eraser
2007-12-17 22:01
2008.01.20
Цифровая подпись для exe и dll модулей


2-1197973757
Kolan
2007-12-18 13:29
2008.01.20
Что возвращает функция EditConnectionString?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский