Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы при работе с интерфейсами [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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо