Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1092915436
GIL
2004-08-19 15:37
2004.09.19
Как общаться с базой данных, доступной только для чтения


14-1093943954
ИМХО
2004-08-31 13:19
2004.09.19
Эмиграция в США или Европу


6-1089949637
Гость778
2004-07-16 07:47
2004.09.19
Подскажите где скачать компонент TWebBrowser


4-1092036738
}|{yk
2004-08-09 11:32
2004.09.19
Как бы попроще получить иконку приложения?


10-1034651971
Comwad
2002-10-15 07:19
2004.09.19
Глюк в Delphi 7 или VB4.5 (Пример Midas XML)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский