Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
3-1092909509
KIR
2004-08-19 13:58
2004.09.19
Функция Round в InterBase


14-1093688385
able
2004-08-28 14:19
2004.09.19
Как сделать два монитора независимыми друг от друга?


1-1093574824
Sollo
2004-08-27 06:47
2004.09.19
motorola C330 SDK


1-1094031225
TankMan
2004-09-01 13:33
2004.09.19
Структура lnk


1-1094024674
SNV-Soft
2004-09-01 11:44
2004.09.19
Где найти бесплатные компоненты в стиле XP или Office2000!?




   Наверх