Форум: "Основная";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
ВнизПроблемы при работе с интерфейсами Найти похожие ветки
← →
shc (2004-09-03 15:09) [0]Здравствуйте мастера. Подскажите, пожалуйста, почему не работает пример кода
(по идее должен добовлятся элемент в список, но это не происходит)
Пример кода:
IInterfaceList = interface
...
function Add(const Item: IInterface): Integer;
...
end;
IXMLAttributeDefList = interface(IInterfaceList)
...
property AttributeDefs[const Index: Integer]: IXMLAttributeDef read GetAttributeDef; default;
...
end;
IXMLElementDef = interface(IXMLTypedSchemaItem)
...
property AttributeDefs: IXMLAttributeDefList read GetAttributeDefList;
...
end;
..................
procedure ttt;
var Rr: IXMLElementDef;
item: IXMLAttributeDef;
begin
rr.AttributeDefs.Add(item); <-- ничего не происходит
end;
← →
Суслик © (2004-09-03 15:17) [1]может ты ничего не реалзиовал в add?
← →
Суслик © (2004-09-03 15:18) [2]кто будет реализовавывать указанные интерфейсы?
сами по себе они работать не будут - это интерфейсы.
нужно писать классы, которые будут что-то делать
если такие классы у тебя описаны, то покажи их
← →
MBo © (2004-09-03 15:21) [3]где реализация интерфейсов???
где создание объекта????
← →
shc (2004-09-03 15:32) [4]Классы и интерфейсы из стандартной библиотеки Делфи.
Реально, Rr:IXMLElementDef я получаю с помощю функции (значит он создан), и получаю нормально (пробывал выводить его другие свойства).
А вот item действительно не создаю.
Я так понял, предлагается сначала выполнить
item:=(TXXXClass.create as IXMLAttributeDef);
а уже потом
rr.AttributeDefs.Add(item); ???
← →
Суслик © (2004-09-03 17:53) [5]
> item:=(TXXXClass.create as IXMLAttributeDef);
> а уже потом
> rr.AttributeDefs.Add(item); ???
да.
можно без as, т.е. просто
item := tsomeclass.create
если:
1) tsomeclass реализовывает инерфейс item
2) если не ошибаюсь в этом случае у интерфейса должен стоять guid (типа такого).
← →
Суслик © (2004-09-03 18:00) [6]вообще обычно пишут так (пишу тут, т.е. могут быть синтаксические ошибки)
type
ISomeInterface = interface
["{5A7C1DD1-1D30-4DCE-ACC4-8553BF1FCFE8}"]
// guid создается ctrl+shift+g. Всегда создавай новый!!!
procedure DoSomething;
end;
TSomeObject = class(TInterfacedObject, ISomeInterface)
protected procedure DoSomething;
end;
implementation
procedure TSomeObject.DoSomething;
begin
ShowMessage("hi");
end;
Где-то ещеvar
i: ISomeInterface;
begin
i := TSomeObject.Create();
i.Add();
end;
← →
shc (2004-09-07 15:59) [7]Спасибо за ответы. Нашел другой путь, хоть и коряватый (похоже метод Адд не реализовывался для даного типа, хотя присутствует в интерфейсе)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.054 c