![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы при работе с интерфейсами [D7]
shc © (2004-09-03 15:09:00)Здравствуйте мастера. Подскажите, пожалуйста, почему не работает пример кода
(по идее должен добовлятся элемент в список, но это не происходит)
Пример кода:
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;
shc (2004-09-07 15:59:00) [1]Спасибо за ответы. Нашел другой путь, хоть и коряватый (похоже метод Адд не реализовывался для даного типа, хотя присутствует в интерфейсе)
Суслик (2004-09-03 18:00:00) [2]вообще обычно пишут так (пишу тут, т.е. могут быть синтаксические ошибки)
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;
Суслик (2004-09-03 17:53:00) [3]
> item:=(TXXXClass.create as IXMLAttributeDef);
> а уже потом
> rr.AttributeDefs.Add(item); ???
да.
можно без as, т.е. просто
item := tsomeclass.create
если:
1) tsomeclass реализовывает инерфейс item
2) если не ошибаюсь в этом случае у интерфейса должен стоять guid (типа такого).
shc (2004-09-03 15:32:00) [4]Классы и интерфейсы из стандартной библиотеки Делфи.
Реально, Rr:IXMLElementDef я получаю с помощю функции (значит он создан), и получаю нормально (пробывал выводить его другие свойства).
А вот item действительно не создаю.
Я так понял, предлагается сначала выполнить
item:=(TXXXClass.create as IXMLAttributeDef);
а уже потом
rr.AttributeDefs.Add(item); ???
MBo (2004-09-03 15:21:00) [5]где реализация интерфейсов???
где создание объекта????
Суслик (2004-09-03 15:18:00) [6]кто будет реализовавывать указанные интерфейсы?
сами по себе они работать не будут - это интерфейсы.
нужно писать классы, которые будут что-то делать
если такие классы у тебя описаны, то покажи их
Суслик (2004-09-03 15:17:00) [7]может ты ничего не реалзиовал в add?