Форум: "Компоненты";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизМожно ли опубликовать в наследнике функцию ? Найти похожие ветки
← →
Sphinx © (2005-03-08 17:19) [0]Запутался меж двух кустов :)
имеется некий компанент вида :TMyCompanent = class (TObject)
private
FValue: Integer;
protected
function DoSome(aValue);
property Value: Integer read FValue write FValue;
end;
и имеется наследник :TChildren = class (TMyComp)
public
property Value; // <= публикуется свойство родителя
end;
вопрос...можно ли опубликоватьfunction DoSome
в piblic TChildren?
← →
Sphinx © (2005-03-08 17:21) [1]сорри...ошибка..читать :
TChildren = class (TMyCompanent)
← →
Набережных С. © (2005-03-08 17:31) [2]Можно.
← →
Sphinx © (2005-03-08 17:38) [3]> Набережных С. © (08.03.05 17:31) [2]
Спасиба :)
тогда другой вопрос...как ? :)TChildren = class (TMyCompanent)
public
property Value; // <= публикуется свойство родителя
function DoSome; // <= ошибка
end;
← →
Плохиш © (2005-03-08 17:55) [4]Вот сообщение об ошибке прочитаешь и всё поймёшь.
← →
Sphinx © (2005-03-08 18:13) [5]> Плохиш © (08.03.05 17:55) [4]
Да я уже запутался просто...
пробовал ставить в предкеfunction DoSome(aValue); virtual;
, но тогда в потомке или получается что функция скрывает метод предка, или перезагружают, но всё равно требуют объявления функции в потомке и вызовуinherited
для вызова функции предка, вот этого я и не хочу. Мне интересно можно ли просто перенести функцию из protected в public как в приведенном примере опубликовано свойство...если можно - то какие параметры нужны...
← →
Набережных С. © (2005-03-08 18:28) [6]А ведь похоже, что так просто нельзя, извини. Встречал ведь где-то в справке, что можно, а как - даже и не задумывался. Похоже, без переопределения никак, синтаксис не позволяет:(
← →
Sphinx © (2005-03-08 18:38) [7]Жаль...значит буду переопределять...
Спасибо огромное за помощь...
← →
Набережных С. © (2005-03-08 18:49) [8]
> Sphinx © (08.03.05 18:38) [7]
Ну ты погоди расстраиваться. Может кто знает, подскажет еще. А я, собственно, присоединяюсь к вопросу:)
← →
bar (2005-03-25 14:35) [9]Если тебе нужна именно функция то можешь использовать такой фокус.
TMyCompanent = class(TObject)
private
FValue: Integer;
function Getvalue(const x, y: Integer; S: string; sender: Tobject): string;
protected
property Value[const x, y: Integer; S: string; sender: Tobject]: string read
Getvalue;
end;
TChilder = class(TMyCompanent)
public
property Value;
end;
...implementation....
function TMyCompanent.Getvalue(const x, y: Integer; S: string; sender: Tobject):
string;
begin
result := s + inttostr(x + y) + " " + sender.ClassName;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: TChilder;
begin
s := TChilder.Create;
caption := s.Value[10, 12, "hello", Memo1];
s.Free;
end;
Причем свойство Value можно определить не только в TMyCompanent но и в Childer.
Получаешь почти настоящую функцию, только параметры надо перечислять в [] , а не в ().
Зато можешь переопределять в потомках хоть как public, хоть как private.
Кроме того о отличи от виртуальных и динамических методов обращение к свойству
вызывает Getvalue по статическуму адресу.
Вот такие шутники в борланде: опубликовать метод в потомке нельзя, зато можно
использовать свойство как функцию.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c