АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Один класс может содержать реализацию нескольких интерфейсов

Читайте также:
  1. CASE - технология. Классификация программных средств.
  2. I,2: ПАТАНДЖАЛИ И ТЕКСТЫ КЛАССИЧЕСКОЙ ЙОГИ
  3. I. ЛИЗИНГОВЫЙ КРЕДИТ: ПОНЯТИЕ, ИСТОРИЯ РАЗВИТИЯ, ОСОБЕННОСТИ, КЛАССИФИКАЦИЯ
  4. I. Типичные договоры, основные обязанности и их классификация
  5. I. Точка зрения классической теории.
  6. А если и может, то Конституционный суд отменит это решение в пять минут.
  7. А) самого страхователя или иного лица, на которое такая ответственность может быть возложена в пользу выгодоприобретателя; ???????????
  8. Абстрактные классы.
  9. Адаптация пятиклассников в средней школе
  10. Административная (Классическая) школа (1920 – 2950).
  11. Административная (классическая) школа менеджмента
  12. Акции, их классификация и особенности

 

Применение интерфейса для доступа к объекту динамически-подключаемой библиотеки

Если вы поместите свой класс в DLL-библиотеку, то при необходимости использовать его в главной программе столкнетесь с проблемой. Подключение модуля с классом к главной программе приведет к включению в нее кода всех методов класса, т.е. задача выделения класса в DLL-библиотеку не будет решена. Если же не подключить модуль с описанием класса, главная программа вообще не будет знать о существовании класса, и воспользоваться классом будет невозможно. Эта проблема решается с помощью интерфейсов.

Сначала вынесем описание интерфейса ITextReader в отдельный модуль (например, ReaderIntf), чтобы этот модуль в дальнейшем можно было подключить к главной программе:

unit ReadersIntf;

Interface

Type

ITextReader = interface(IInterface)

...

end;

Implementation

End.

Затем удалим описание интерфейса из модуля ReadersUnit, а вместо него подключим модуль ReaderIntf:

 

unit ReadersUnit;

Interface

Uses

ReaderIntf;

...

Наконец включим скорректированный модуль ReadersUnit в DLL-библиотеку, которую назовем ReadersLib:

 

library ReadersLib;

Uses

SysUtils, Classes, ReadersUnit;

{$R *.res}

Begin

End.

Вроде бы все готово, и теперь в главной программе достаточно подключить модуль ReaderIntf и работать с объектами через интерфейс ITextReader.

 

 

А как в программе создавать объекты классов, находящихся в DLL-библиотеке? Ведь в нтерфейсе нет методов для создания объектов! Для этого определим в DLL-библиотеке специальную функцию и экспортируем ее:

 

Library ReadersLib;

...

Function GetDelimitedReader(constFileName: string; constDelimiter: Char = ';'): ITextReader;

Begin

Result:= TDelimitedReader.Create(FileName, Delimiter);

end;

Exports

GetDelimitedReader;

Begin

End.

 

В главной программе импортируйте функцию GetDelimitedReader, чтобы с ее помощью создавать объекты класса TDelimitedReader:

Program Example;

Uses

ReadersIntf;

function GetDelimitedReader(constFileName: string; constDelimiter: Char = ';'): ITextReader;

external 'ReadersLib.dll' name 'GetDelimitedReader';

Var

Intf: ITextReader;

Begin

Intf:= GetDelimitedReader;

...

End.

 

Теперь вы знаете, как разместить объекты в DLL-библиотеке. Смело пользуйтесь динамически загружаемыми библиотеками, не теряя преимуществ ООП.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)