![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отсутствие множественного наследования
Juice © (2005-08-03 22:41:00)Почему, или в чем смысл, или какое обьяснение этому факту?
Lamer@fools.ua (2005-08-04 08:29:00) [21]> Так как реализована поддержка интерфейсов в Делфи? Неужто без участия технологии COM от Microsoft?
AFAIK, без. Но интерфейсы Delphi совместимы с интерфейсами COM.
В System.pas есть только четыре функции, которые импортируются из oleaut32.dll (D6):
function SysAllocStringLen(P: PWideChar; Len: Integer): PWideChar; stdcall;
external oleaut name 'SysAllocStringLen';
function SysReAllocStringLen(var S: WideString; P: PWideChar;
Len: Integer): LongBool; stdcall;
external oleaut name 'SysReAllocStringLen';
procedure SysFreeString(const S: WideString); stdcall;
external oleaut name 'SysFreeString';
function SysStringLen(const S: WideString): Integer; stdcall;
external oleaut name 'SysStringLen';
Как видно, ни одна из них к COM/OLE непосредственноне относится. Кстати, реально импортируется в данном случае (Project2) только SysFreeString.
Касательно ole32.dll: оная содержится в таблице импорта oleaut32.dll.
Джо (2005-08-03 23:29:00) [22]
> [7] Гаврила © (03.08.05 22:50)
Проведи небольшой эксперимент.
Создаем вот такое приложение:
program Project1;
{$APPTYPE CONSOLE}
begin
ReadLn
end.
Как видим, никаких модулей, кроме стандартного System не подключаем.
Запускаем, дожидаемся, пока выполнение дойдет до ReadLn и нажимаем Alt+Ctrl+M (меню View/Debug windows/Modules). В окошке "Modules" наблюдаем следующую картину:
ntdll.dll
kernel32.dll
user32.dll
gdi32.dll
advapi32.dll
rpcrt4.dll.
Теперь добавляем в приложение объявление интерфейса и класс, его реализующий. В uses по-прежнему ничего не добавляем. Проект:
program Project2;
{$APPTYPE CONSOLE}
type
ISample = interface
end;
TSample = class (TInterfacedObject, ISample)
end;
var
Sample: ISample;
begin
Sample := TSample.Create;
ReadLn
end.
Опять смотрим модули - и о чудо! :) К нашим старым знакомцам добавилось:
OLEAUT32.dll
ole32.dll.
Вопрос: Ole-automation - имеет отношение к COM?
Так как реализована поддержка интерфейсов в Делфи? Неужто без участия технологии COM от Microsoft?
Джо (2005-08-03 22:58:00) [23]
> [7] Гаврила © (03.08.05 22:50)
> Тоько COM тут ни при чем.
?
Джо (2005-08-03 22:54:00) [24]
> [6] Alexander Panov © (03.08.05 22:50)
> Интересно, а если есть у обоих предков свойство "зеленые
> глаза", от кого унаследуется это свойство?
Вот-вот. Придется вводить новые синтакс. формы для указания конкретного предка для конкретного свойства или метода. Собственно, при имплементации интерфейсов (interfaces) так и приходится поступать. Но тут реализация не наследуется, так что это пол-беды.
Alexander Panov (2005-08-03 22:51:00) [25]Интересно, а если есть у обоих предков свойство "зеленые глаза", от кого унаследуется это свойство?
Гаврила (2005-08-03 22:50:00) [26]
> [3] Джо ©
> очень удобно использовать COM-интерфейсы
Тоько COM тут ни при чем. Просто интерфейсы
Alexander Panov (2005-08-03 22:50:00) [27]Интересно, а если есть у обоих предков свойство "зеленые глаза", от кого унаследуется это свойство?
Джо (2005-08-03 22:49:00) [28]
> [4] Гаврила © (03.08.05 22:48)
> Если оба предка одноглазые - то от обоих
Тогда придется вводить новое понятие - половина свойства. :0)
Гаврила (2005-08-03 22:48:00) [29]
> [2] Alexander Panov ©
Если оба предка одноглазые - то от обоих
Джо (2005-08-03 22:48:00) [30]
> Juice © (03.08.05 22:41)
Потому что слишком много с ним проблем, которые можно было разрешить только на уровне синтаксиса. А идеология Паскаля, по моему, тем и хороша, что ограничивается строгим синтаксисом. В отличие от С++, где сам Страуструп ногу сломает :)
П.С. Для указания того, что один объект может выступать в разных "ипостасях" очень удобно использовать COM-интерфейсы.
Alexander Panov (2005-08-03 22:47:00) [31]Интересно, а если есть у обоих предков свойство "зеленые глаза", от кого унаследуется это свойство?
Гаврила (2005-08-03 22:43:00) [32]Есть мама, у нее женские половые признаки
Есть папа - у него мужские
У ребенка должны быть и те и другие?