Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Проблемы при работе с интерфейсами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.065 c
14-1093976300
kaif
2004-08-31 22:18
2004.09.19
Была тут ветка про Шнура


1-1094555012
begginers
2004-09-07 15:03
2004.09.19
browser


14-1093974600
Mim1
2004-08-31 21:50
2004.09.19
Может пригодится. (софтинка)


1-1094040165
bloodman
2004-09-01 16:02
2004.09.19
Как получить доступ ко всем пунктам меню?


14-1093587971
КаПиБаРа
2004-08-27 10:26
2004.09.19
Опрос2