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

Вниз

Узнать наличие метода у объекта   Найти похожие ветки 

 
чяйник   (2005-02-24 13:58) [0]

У меня есть, допустим, массив объектов какого-то класса, объекты создаются как экземпляры различных дочерних классов этого класса. Как мне узнать, существует ли нужный мне метод у какого-либо объекта из этого массива? Т.е. проблема просто сводится к тому, существует ли нужный метод у объекта. Пробовал сравнивать MethodAddress с nil, не помогло. Почему-то всегда nil! :)


 
Digitman ©   (2005-02-24 14:05) [1]


> Почему-то всегда nil


потому что MethodAddress() работает лишь с published-методами


 
Юрий Зотов ©   (2005-02-24 14:19) [2]

Вариант решения - использовать интерфейсы.


 
DiamondShark ©   (2005-02-24 14:22) [3]

А я вот с трудом представляю задачу, где это нужно.


 
AkaSaint ©   (2005-02-24 22:30) [4]

TClass1 = class
...
end;

TClass2 = class(TClass1)
...
public:
procedure NewMethod;
end;

Class1Array: array of TClass1;
...
for i := 0 to Length(Class1Array) - 1 do
 if Class1Array[i] is TClass2 then
   //Есть NewMethod
 else
  //нет


 
Eraser ©   (2005-02-24 23:39) [5]

чяйник

Зачем тебе это?
Лучше скажи с какой целью тебе нужно узнавать есть ли в классе этот метод.
95% что твою задачу нужно решать совершенно по-другому...


 
Недоброжелатель   (2005-02-25 00:05) [6]

Метод всегда есть часть класса, поэтому
if SomeObj is TSomeClass then TSomeClass(SomeObj).SomeClassMethod


 
Palladin ©   (2005-02-25 00:17) [7]

Более прекрасной заменой наличия методов являются свойства.


 
чяйник   (2005-03-01 16:59) [8]


> Зачем тебе это?
> Лучше скажи с какой целью тебе нужно узнавать есть ли в
> классе этот метод.

я хотел сделать небольшую игру с использованием direct draw, там vcl нельзя, так что кнопки и прочие элементы интерфейса пришлось делать. Окно принимает сообщения от мышы и клавиатуры и пытается вызвать метод того или иного объекта. Я сейчас использую операцию is, как посоветовал Недоброжелатель, но мне кажется, что это можно сделать проще...


> Palladin ©   (25.02.05 00:17) [7]
> Более прекрасной заменой наличия методов являются свойства.

а можно пример?


 
Digitman ©   (2005-03-01 17:03) [9]


> хотел сделать небольшую игру с использованием direct draw,
> там vcl нельзя


бред сивой кобылы.


 
чяйник   (2005-03-01 17:04) [10]

метод - в смысле mousemove, click и т.п.
то есть моей кнопке mousemove не нужен (и его нету), как его не вызывать, не проверяя принадлежность к классу?


 
Digitman ©   (2005-03-01 17:05) [11]


> Более прекрасной


этто чтотто)


 
У   (2005-03-01 17:21) [12]

пошли сообщение


 
Digitman ©   (2005-03-01 17:29) [13]


> пошли сообщение


SendMessageCallback()



Страницы: 1 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
14-1109041831
ЮЮ
2005-02-22 06:10
2005.03.13
Всех мужчин с наступающим !!!


14-1108930962
syte_ser78
2005-02-20 23:22
2005.03.13
турпоездка


1-1109255995
AdmeraL
2005-02-24 17:39
2005.03.13
REGISTRY


1-1109591627
Object
2005-02-28 14:53
2005.03.13
Как сохранить таблицу из DBGrid в xml - файл?


1-1109262876
AlexanderVas
2005-02-24 19:34
2005.03.13
Можно ли поменять тип записи во время исполнения программы