Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
6-1123011535
Михаил(Киров)
2005-08-02 23:38
2005.11.20
Socketы


1-1130077478
users
2005-10-23 18:24
2005.11.20
Чем упаковать несколько файлов в один архив, не используя DLL ?


4-1126874996
Stanislav
2005-09-16 16:49
2005.11.20
Как использовать CreateThread


9-1120370383
Tratata
2005-07-03 09:59
2005.11.20
Книга по 3Д


3-1128601467
Shc
2005-10-06 16:24
2005.11.20
Прорисовка DBRichEdit на DBCtrlGrid





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