Текущий архив: 2007.09.16;
Скачать: CL | DM;
ВнизПомогите открыть свойство в классе? Найти похожие ветки
← →
MainClass (2007-07-28 07:31) [0]Есть чужой класс:
TMainClassZ = class
private
FDatabaseZ: TDatabaseZ;
..
end;
Я хочу создать дочерний класс, чтобы у него в public было вписано:property DatabaseZ: TDatabaseZ read FDatabaseZ;
чтобы его можно было читать. Но непойму как это сделать ПРОСТО.
Чтобы не перечислять всё и вся из основного класса. Или так нельзя?
Или может есть какая горячая клавиша, чтобы это сделалось автоматически?
← →
ya00011 (2007-07-28 07:34) [1]Не изменяя чужой класс, можно только через жопу, прошу прощения:)
ЗЫ... кстати, нужна ли запятая в первом случае? (в моем предложении)
← →
MainClass (2007-07-28 07:54) [2]
> ya00011 (28.07.07 07:34) [1]
> Не изменяя чужой класс, можно только через жопу, прошу прощения:
> )
Это ты так называешь создание дочерних классов?
← →
Юрий Зотов © (2007-07-28 11:59) [3]> MainClass (28.07.07 07:31)
Если в предке доступ к полю вынесен хотя бы в protected, то спокойно наследуемся и в наследнике выносим доступ в public.
Если же нет, то придется вписать свой класс-потомок в тот же модуль, где находится класс-предок.
← →
P_ (2007-07-28 18:45) [4]
> Юрий Зотов © (28.07.07 11:59) [3]
>
> > MainClass (28.07.07 07:31)
>
> Если в предке доступ к полю вынесен хотя бы в protected,
> то спокойно наследуемся и в наследнике выносим доступ в
> public.
>
> Если же нет, то придется вписать свой класс-потомок в тот
> же модуль, где находится класс-предок.
В принципе очень плохой тон объявлять private переменные.
← →
Yanis © (2007-07-28 18:50) [5]
> В принципе очень плохой тон объявлять private переменные.
А какими их надо объявлять?
← →
P_ (2007-07-28 20:45) [6]
> Yanis © (28.07.07 18:50) [5]
>
> > В принципе очень плохой тон объявлять private переменные.
>
> А какими их надо объявлять?
protected
Программист не может учесть того что когда-то понадобится к переменной получить прямой доступ.
← →
Yanis © (2007-07-28 21:01) [7]
>
> Программист не может учесть того что когда-то понадобится
> к переменной получить прямой доступ.
Хм… Верно конечно. А я предполагал, что просто надо давать методы дающие доступ к этим переменным.
← →
Юрий Зотов © (2007-07-29 01:30) [8]> P_ (28.07.07 20:45) [6]
Смотря какой программист и смотря какая переменная.
← →
MainClass (2007-07-29 07:43) [9]
> Юрий Зотов © (28.07.07 11:59) [3]
>
> > MainClass (28.07.07 07:31)
>
> Если в предке доступ к полю вынесен хотя бы в protected,
> то спокойно наследуемся и в наследнике выносим доступ в
> public.
>
> Если же нет, то придется вписать свой класс-потомок в тот
> же модуль, где находится класс-предок.
А можно как нибудь без вписывания? Очень не хочется там что-то менять.
← →
ya00011 (2007-07-29 07:51) [10]
> MainClass (29.07.07 07:43) [9]
Конечно можно... Вычислить смещение адреса этой переменной относительно адреса объекта. Пусть смещение будет offset, тогда:
obj:TMainClassZ;
DatabaseZ: TDatabaseZ;
...
DatabaseZ:=TDatabaseZ(Integer(obj)+offset);
Вычислить смещение можно эксперементальным путем, дебагером и умных людей послушать. Я сам этого не делал никогда:)
← →
Kolan © (2007-07-29 08:27) [11]> А какими их надо объявлять?
> protected
А я объявляю ихstrict private
и чувствую себя хорошо.
← →
Юрий Зотов © (2007-07-29 11:14) [12]> MainClass (29.07.07 07:43) [9]
> А можно как нибудь без вписывания?
Легальным способом - нельзя. Нелегальным - см. [10]. Но не советую.
> Очень не хочется там что-то менять.
Менять ничего и не надо. Добавляется свой класс - и все. Оригинальный же код не меняется ни на символ.
← →
имя (2007-08-20 22:33) [13]Удалено модератором
Страницы: 1 вся ветка
Текущий архив: 2007.09.16;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.047 c