На этой странице вы найдете информацию о программировании, данная информация была взята с разных источников и автором. Поэтому мы не претендуем на авторство этого материала, а лишь предоставляем возможность ознакамливаться с ним.
Сначала вынесем описание интерфейса ITextReader в отдельный модуль (например, ReaderIntf), чтобы этот модуль в дальнейшем можно было подключить к… Затем удалим описание интерфейса из модуля ReadersUnit, а вместо него… Наконец включим скорректированный модуль ReadersUnit в DLL-библиотеку, которую назовем ReadersLib:
library… ...
Интерфейс по сути выступает дополнительной таблицей виртуальных методов, ссылка на которую укладывается среди полей объекта (рисунок 6.5). Эта… Интерфейсная переменная хранит ссылку на скрытое поле объекта, которое… к адресу объекта добавляется смещение до скрытого поля внутри объекта и этот результат заносится в интерфейсную… ...
Подсчет ссылок на объект обеспечивают методы _AddRef и _Release интерфейса IInterface. При копировании значения интерфейсной переменной вызывается… Стандартная реализация методов _AddRef и _Release находится в классе… Заметим, что функции InterlockedIncrement и InterlockedDecrement просто увеличивают значение целочисленной переменной… ...
Если объект действительно поддерживает запрашиваемый интерфейс, то результатом является ссылка соответствующего типа. Если же объект не поддерживает… В действительности оператор as преобразуется компилятором в вызов метода… Напомним, что метод QueryInterface описан в интерфейсе IInterface и попадает автоматически во все интерфейсы.… ...
то интерфейсной переменной базового типа может быть присвоено значение интерфейсной переменной производного типа:
var Reader: ITextReader;… Но не наоборот:
ExtReader := Reader; // Ошибка! Правило совместимости интерфейсов чаще всего применяется при передаче параметров в процедуры и функции. Например, если… ...
В этом примере интерфейс ITextReader в классе TTextParser реализуется не самим классом, а его внутренней переменной FTextReader.
Очевидно, что внутренний объект должен быть совместим с реализуемым… ...
Интерфейс IStringIterator предназначен для последовательного доступа к списку строк. Метод Next возвращает очередную строку из списка, метод… Реализуем интерфейс IStringIterator в классе TTextReader таким образом, чтобы… Чтение этой таблицы через интерфейс IStringIterator вернет следующую последовательность строк:
… ...
Интерфейсная переменная занимает в оперативной памяти четыре байта, хранит ссылку на интерфейс объекта и автоматически инициализируется значением… Перед использованием интерфейсную переменную инициализируют значением… После инициализации интерфейсную переменную Intf можно использовать для вызова методов объекта Obj:
Intf.Active… ...
Такая запись означает, что класс TTextReader унаследован от класса TObject и реализует интерфейс ITextReader (см. рисунок 6.1).
Рисунок 6.1. Класс TTextReader унаследован от класса TObject и реализует… Класс, реализующий интерфейс, должен содержать код для всех методов интерфейса. Класс TTextReader в модуле ReadersUnit… ...
Глобально-уникальный идентификатор — это 16-ти байтовое число, представленное в виде заключенной в фигурные скобки последовательности… В среде Delphi глобально-уникальный идентификатор описывается типом данных… Константы с типом TGUID разрешено инициализировать строковым представлением глобально-уникального идентификатора.… ...
Определенный таким образом интерфейс включает все методы и свойства своего предшественника и добавляет к ним свои собственные. Несмотря на… В языке Delphi существует предопределенный интерфейс IInterface, который… эквивалентно следующему:
type ITextReader = interface(IInterface) ... end; ...
Приведем пример интерфейса и сразу заметим, что интерфейсам принято давать имена, начинающиеся с буквы I (от англ. Interface):
type… Интерфейс ITextReader предназначен для считывания табличных данных из… Объяснение состоит в следующем. Не определив интерфейс ITextReader, невозможно разместить класс TTextReader в… ...
Модуль ShareMem является модулем импорта динамически загружаемой библиотеки Borlndmm.dll, которая должна распространяться вместе с вашей программой.… Модуль ShareMem следует подключать еще и в том случае, если между библиотекой… ...