Odysseos

Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору and23 Цитата: Такое: TMyClass(Obj) - да, такое: (Obj as TMyClass) - вполне в рамках приличий. Проверка "is" - тем более. Впрочем, не настаиваю | Дело не в синтаксисе и не в опасности/безопасности разных методов - в ООП с его наследованием и полиморфизмом не предполагается проверка класса объекта - если он наследник, то он a priori может быть подставлен вместо предка, иначе - нет. А сама _надобность_ проверок в какой либо иерархии классов, строго говоря, вызывает вопросы к проектированию оной конкретной иерархии. (Если же говорить про "настоящий" ООП - гляньте на SmallTalk, с его обработчиками сообщений вместо методов). Цитата: Ну, вот здесь Вы точно неправы насчёт хака. Впрочем, я тоже пакеты не люблю и при необходимости взаимодействовать с dll пользуюсь интерфейсами. | Ну я же и написал, что runtime-пакеты - это не "грязный хак" (имея в виду, что оно - костыль). Цитата: Шутите? 8-o Ушёл проверять... | Чего б ему не работать? Ещё раз - ссылка на VMT хранится в каждом объекте, в скрытом поле, при этом - если VMT классов в EXE и DLL одинаковые, то смещения методов в таблицах для EXE и DLL будут одинаковыми, и если из EXE вызвать некий метод (пусть под индексом 3) некоего объекта (скажем, класса TObject) из DLL, вызван будет метод DLL.TObject.VMT[3], по своему коду совершенно аналогичный EXE.TObject.VMT[3] - хотя, разумеется, _физически_ это будет другой код. Причём совершенно не важно, метод этот виртуальный или нет. | Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 11:56 18-11-2009 | Исправлено: Odysseos, 13:01 18-11-2009 |
|