Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.09.11;
Скачать: [xml.tar.bz2];

Вниз

Inherited   Найти похожие ветки 

 
Очень злой   (2011-05-26 16:35) [0]

Чем отличается такой вызов перекрытого метода родительского класса

inherited Destroy;

от такого:

inherited;

?

если ничем, то откуда компилятор знает, какой параметр передавать в случае если вызов производится с параметром, например
inherited;
используется вместо:
inherited Create(AOwner);

?


 
Медвежонок Пятачок ©   (2011-05-26 16:40) [1]

инхеритед без ничего вызывает одноименный текущему методу.
инхеритед с чем-то вызывает конкретный метод предка.


 
Ega23 ©   (2011-05-26 16:51) [2]

type

 TClass1 = class (TObject)
 public
   constructor Create;
 end;

 TClass2 = class (TClass1)
 public
   constructor Create(Value: integer);
 end;

constructor TClass1.Create;
begin
 inherited; // можно и inherited Create; разницы нет
end;

constructor TClass2.Create(Value: Integer);
begin
 inherited Create; // а вот тут уже на просто inherited; будет ошибка,
                        // ибо у предка в конструкторе нет параметра Value
end;


 
icWasya ©   (2011-05-26 17:07) [3]

И есть ещё ньюанс. Кода вы пишете обработчик message, то написав inherited;, вы вызовите не одноимённую функцию предка, а обработчик сообщения с таким же номером, то есть не нужно знать, как он называется и есть ли вообще.


 
Ega23 ©   (2011-05-26 17:11) [4]


> icWasya ©   (26.05.11 17:07) [3]
>
> Кода вы пишете обработчик message, то написав inherited;,


во! Спасибо что напомнил!


 
Anatoly Podgoretsky ©   (2011-05-26 19:00) [5]

> Очень злой  (26.05.2011 16:35:00)  [0]

Чего так и будешь огрызки показывать, вместо полного кода?


 
_Юрий   (2011-05-26 19:11) [6]

И есть ещё ньюанс. Если метод предка абстрактный, то написав
inherited Имя метода
получим исключение, а просто
inherited - не получим


 
Ega23 ©   (2011-05-26 20:05) [7]


> _Юрий   (26.05.11 19:11) [6]


Если метод абстрактный, то нефиг вообще inherited писать.
Хотя вопрос скользкий: а вдруг иерархия измениться?
Палка о двух концах, короче.


 
Игорь Шевченко ©   (2011-05-26 23:23) [8]


> Кода вы пишете обработчик message, то написав inherited;
> , вы вызовите не одноимённую функцию предка, а обработчик
> сообщения с таким же номером


весьма забавно

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
  TFoo = class
  private
    procedure Bar(var Message: TMessage); message WM_DESTROY;
    procedure Foo(var Message: TMessage); message WM_CREATE;
  end;

  TBar = class(TFoo)
  private
    procedure Foo(var Message: TMessage); message WM_DESTROY;
    procedure Bar(var Message: TMessage); message WM_CREATE;
  end;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TFoo }

procedure TFoo.Bar(var Message: TMessage);
begin
 ShowMessage("Foo.WMDestroy");
end;

procedure TFoo.Foo(var Message: TMessage);
begin
 ShowMessage("Foo.WMCreate");
end;

{ TBar }

procedure TBar.Bar(var Message: TMessage);
begin
 inherited;
 ShowMessage("Bar.WMCreate");
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Bar: TBar;
 Message: TMessage;
begin
 Bar := TBar.Create;
 Message.Msg := WM_CREATE;
 Bar.Dispatch(Message);
 Message.Msg := WM_DESTROY;
 Bar.Dispatch(Message);
 Bar.Free;
end;

procedure TBar.Foo(var Message: TMessage);
begin
 inherited;
 ShowMessage("Bar.WMDestroy");
end;

end.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.09.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.003 c
1-1266238962
Дмитрий Белькевич
2010-02-15 16:02
2011.09.11
Разрушение объекта при двойном щелчке на объекте


15-1306044364
Архип
2011-05-22 10:06
2011.09.11
Использование заголовычных файлов С++


2-1306831572
Max
2011-05-31 12:46
2011.09.11
массивы


2-1306258246
Станислав
2011-05-24 21:30
2011.09.11
Сбалансированное бинарное дерево


15-1306165114
bss
2011-05-23 19:38
2011.09.11
Автоматизация логистики, курьерская служба





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