Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.043 c
14-1108960327
begin...end
2005-02-21 07:32
2005.03.13
С Днём рождения! 21 февраля


14-1108710940
Алексей#13
2005-02-18 10:15
2005.03.13
Имеем ли мы право?


1-1109453182
Urvin
2005-02-27 00:26
2005.03.13
Как правильно напечатать


14-1109060470
Чеширский_Кот
2005-02-22 11:21
2005.03.13
Разбирающимся в ноутбуках


14-1109087267
r.o.o.t
2005-02-22 18:47
2005.03.13
АБАЛДЕТЬ!!!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский