Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
Внизdelphi отказывает в приведении типа. Почему? Найти похожие ветки
← →
deffer (2002-10-24 18:10) [0]есть переменная form типа TForm.
var form : TForm;
реально хранит объект класса, порожденного от TForm и реализующего IMyInterface. Попытка обратиться к form как к объекту с интерфейсом IMyInterface
IMyInterface(form).myMethod;
отбрасывается компилятором. Ошибка : Incompatible types "IMyInterface" and "TForm".
Delphi 5. Это глюк или этому есть разумное объяснение?
← →
asmith (2002-10-24 20:04) [1]Нужно это делать таким образом:
var
mi : IMyInterface;
...
if form.GetInterface(IMyInterface, mi) then
mi.myMethod;
← →
Набережных С. (2002-10-24 20:07) [2]Это глюк, но не в DELPHI :). Компилятор пытается найти в классе TForm интерфейс IMyInterface, а откуда ему там взяться? А то, что ты там собираешься хранить ссылку на объект другого класса - твое глубоко личное дело, компилятор это не волнует
← →
deffer (2002-10-24 21:04) [3]to : asmith
> var
> mi : IMyInterface;
> ...
> if form.GetInterface(IMyInterface, mi) then
> mi.myMethod;
getInterface возвращает false. у меня не COM-овский интерфейс. у меня обычный интерфейс в терминах ООП. может в этом дело?
to All :
может кто чего посоветует? Ситуация вполне типична (часто используется например в Java)
TMy1Class = class (TForm, IMyInterface)
TMy2Class = class (TForm, IMyInterface)
...
TMy10Class = class (TForm, IMyInterface)
IMyInterface = interface
procedure myMethod;
end;
где-то инициализиурется переменная form объектом TMyXForm, где X зависит от разных параметров
например form:=TMy3Form.create(self);
в каком-то месте кода мне нужно получить доступ к form как к TForm так и как к IMyInterface (причем какой точно объект лежит в form мне уже неизвестно, но он точно один из My1Form .. My10Form), т.е. нужно выполнить
TForm(form).showModal;
IMyInterface(form).myMethod;
если объявить var form:TForm, то нельзя привести form к IMyInterface.
если объявить var form:IMyInterface, то вываливается с эксепцией (EPrivilege или EExternalException) приведение к TForm.
Так в чем дело? Delphi не поддерживает такое приведение типов, или это делается как-то по-хитрому?
← →
Набережных С. (2002-10-24 21:43) [4]Нельзя интерфейс привести к типу объекта, нет для этого средств, и это вполне естественно и разумно. А смешивать работу с объектом и интерфейсом не стоит даже в такой редакции, как у тебя. Добавь в интерфейс метод GetSelf и объяви переменную типа интерфейса. И кто мешает дать интерфейсу GUID?
← →
deffer (2002-10-25 11:33) [5]to: Набережных С.
Спасибо за идею с getSelf. Как это мне раньше в голову не пришло.
PS: А по поводу давания GUID -- я же говорю, не получается что-то. getInterface возвращает false. Вероятно с GUID-ом делается как-то не так, как я делаю.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c