Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизУзнать наличие метода у объекта Найти похожие ветки
← →
чяйник (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c