ورود

View Full Version : درخواست توضیح در مورد این کد



1485159
سه شنبه 11 خرداد 1389, 20:02 عصر
سلام میشه در مورد خط قرمز توشح بدید؟

constructor TCustomForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
{$IF DEFINED(CLR)}
GlobalNameSpace.AcquireWriterLock(MaxInt);
{$ELSE}
GlobalNameSpace.BeginWrite;
{$IFEND}
try
FCreatingMainForm := Application.FCreatingMainForm;
if FCreatingMainForm then
Application.FCreatingMainForm := False;

InitializeNewForm;
if (ClassType <> TForm) and not (csDesigning in ComponentState) then
begin
Include(FFormState, fsCreating);
try
if not InitInheritedComponent(Self, TForm) then
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
finally
Exclude(FFormState, fsCreating);
end;
{$IF NOT DEFINED(CLR)}
if OldCreateOrder then
{$IFEND}
DoCreate;
end;
finally
{$IF DEFINED(CLR)}
GlobalNameSpace.ReleaseWriterLock;
{$ELSE}
GlobalNameSpace.EndWrite;
{$IFEND}
end;
end;

مصطفی ساتکی
سه شنبه 11 خرداد 1389, 21:05 عصر
یعنی Constructor مربوط به کلاس والد در ابتدا اجرا شده و پس از کد مربوط به Constructor فعلی . البته در شرایطی که Constructor مربوط Override شده باشد . همین قضیه برای Destructor صادق است ولی در انتهای آن.

1485159
سه شنبه 11 خرداد 1389, 21:32 عصر
توی پردازش پیام ها هم کاربرد داره؟
به کار بردن به این صورت چه معنی داره؟

inherited

vcldeveloper
چهارشنبه 12 خرداد 1389, 00:52 صبح
به کار بردن به این صورت چه معنی داره؟
متدی با نام و امضاء متد فعلی را از کلاس والد فراخوانی میکنه.

1485159
چهارشنبه 12 خرداد 1389, 08:18 صبح
متدی با نام و امضاء متد فعلی را از کلاس والد فراخوانی میکنه.
خوب قبلی هم همینکارو میکرد دیگه! متدی رو که از کلاس والد Overrideش کرده ایم رو فراخوانی میکنه؟!
منظور از امضا چیه؟
در ضمن فقط در ارث بری کاربرد داره؟

SAASTN
چهارشنبه 12 خرداد 1389, 11:51 صبح
احتمالا منظور ترتیب و نوع پارامتر هاست.
در هر صورت در مورد inherited در صورتی که پارامتر های متد override شده نسبت به پارامتر های متد در کلاس والد تغییری نکرده باشه می تونیم نام و پارامتر ها رو ذکر نکنیم، اما اگه پارامتر ها تغییر کرده باشن دیگه حتما باید نام و پارامتر ها نوشته بشن.
اگر پارامترها تغییر نکرده باشن ذکر و عدم ذکر نام متد بعد از inherited هیچ تفاوتی نداره (حد اقل از نظر اجرای برنامه، حالا لایه های پایین تر رو نمی دونم).