نمایش نتایج 1 تا 12 از 12

نام تاپیک: مشکل با دستور inherited کمک کنید

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56

    مشکل با دستور inherited کمک کنید

    با سلام
    می خواستم بدونم دو دستور زیر در دلفی دقیقا چه کاری انجام می دهند .
    inherited Create(...);
    inherited;

    با تشکر از دوستان

  2. #2
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    آذر 1383
    پست
    181
    1. وقتى که یه کلاس فرزند (Child) موقع Override کردن یکى از Methodهاى Virtual کلاس والد (Parent) مى‌خواد تا عین همون Method رو از والدش فراخوانى کنه از دستور inherited استفاده مى‌کنه. مثلا مى‌خواى توى Create اول کارهایى رو که والد براى Create شدن انجام مى‌ده رو انجام بدى بعد یه چیزایى رو به اون اضافه کنى. مى‌نویسى :

    inherited Create({Parameter List);
    {Do something ...}


    اگه inherited رو صدا نکنى Method والد صدا نمى‌شه. در ضمن فقط براى Create استفاده نمى‌شه مثال زیر رو ببین:

    type

    TParent = class
    public
    function Foo(Bar: Integer): Integer; virtual;
    end;

    TChild = class (TParent)
    public
    function Foo(Bar: Integer): Integer; override;
    end;

    function TParent.Foo(Bar: Integer): Integer;
    begin
    Result := Bar * 2;
    end;

    function TChild.Foo(Bar: Integer): Integer;
    begin
    Result := inherited Foo(Bar); // returns Bar * 2
    Result := Result * 3;
    end;


    اگه به Foo یه Object از نوع TParent مثلا 2 رو بدى بهت 4 رو بر مى‌گردونه و اگه این Object از نوع TChild باشه همون 2 رو بدى بهت 6 برمى‌گردونه.


    2. دو خط دستور هیچ فرقى با هم ندارن یعنى هر کدوم رو صدا بزنى این اتفاق مى‌افته چه inherited چه inherited ... رو. توى پاسکال و Versionهاى قدیمى‌تر (Compilerهاى قبل از 3) باید از دومى استفاده کنى.

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56
    با تشکر از شما دوست عزیز

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56
    با تشکر از دوست عزیز
    می خوام بدونم اگر در یک برنامه در قسمت onclick یک دکمه فقط کلمه Inherited; نوشته شده باشد چگونه می توان فهمید کدوم والد و از کجا صدا زده می شود . و چگونه می توان در برنامه این را پیدا کرد .
    برای مثال

    constructor TADOConnection.Create(AOwner: TComponent);
    begin
    inherited Create(AOwner);
    FConnectionObject := CreateADOObject(CLASS_Connection) as _Connection;
    OleCheck(ConnectionPoint.Advise(Self as IUnknown, FConnEventsID));
    FCommands := TList.Create;
    LoginPrompt := True;
    FIsolationLevel := ilCursorStability;
    CursorLocation := clUseClient;
    FKeepConnection := True;
    end;

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56

    constructor TADOConnection.Create(AOwner: TComponent);
    begin
    inherited Create(AOwner);
    FConnectionObject := CreateADOObject(CLASS_Connection) as _Connection;
    OleCheck(ConnectionPoint.Advise(Self as IUnknown, FConnEventsID));
    FCommands := TList.Create;
    LoginPrompt := True;
    FIsolationLevel := ilCursorStability;
    CursorLocation := clUseClient;
    FKeepConnection := True;
    end;

  6. #6
    VIP آواتار hr110
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    1,460
    شما وقتی INHERTITED را صدا میکنید ، اولین والدی که متد را پیاده سازی کرده است صدا خواهد شد.
    ... چه بگویم که غم از دل برود چون تو بیایی

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56
    با تشکر از مدیر بخش
    اگر با توجه به حرفی که شما زده اید باشد از کجا می توان فهمید اولین والدی که متد را پیاده سازی کرده است چیست که آن را صدا زده است .
    مثلا در یک برنامه در ONCLICK تمام منوها این خط نوشته شده است چگونه می توان آن را فهمید :


    procedure TfrmMainFormCom.miNationComClick(Sender: TObject);
    begin
    inherited;
    end;


    و آیا مقاله ای در زمینه وراثت و مبحث والد و روابط پدر و فرزند وجود دارد اگر وجود دارد آیا لینکی برای آن وجود دارد .

  8. #8
    VIP آواتار hr110
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    1,460
    سلام،
    ممکن است من سوال شما را به درستی متوجه نشده باشم، ولی فراخوانی متدهای بالاتر(پدر) به شکل بازگشتی میباشد.یعنی در خطی که شما عبارت inherited را صدا کرده باشید، کنترل برنامه به متد بالاتر ارجاع داده میشود و در صورتی که کلاس پدر انرا پیاده سازی نکرده باشد به متد پدر بزرگ( :wink: ) و اگر انهم پیاده سازی نکرده باشد به متد پدر پدر بزرگ و ... ارجاع داده خواهد شد. حال شما در هنگام پیاده سازی کلاسهای خود در گیر این مسائل نخواهید بود و اگر این کلاسها را براساس یک اصول منتطق و استاندارد پیاده سازی کرده باشید مشکل خاصی نخواهید داشت.

    در مورد مقاله هم شرمنده :oops:
    ... چه بگویم که غم از دل برود چون تو بیایی

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56
    با تشکر از مدیریت بخش
    و خسته نباشید
    منظور من دقیقا همان چیزی بود که شما پاسخ آن را دادید حال می خواستم بدانم این متدهای پدر و پدر بزرگ و غیره در کجای برنامه و با چه مشخصاتی تعریف شده اند . مثلا توابع را در قسمت خاصی می توانیم تعریف کنیم آیا این متدهای پدر و پدربزرگ در قسمتهای خاصی از برنامه و با مشخصات خاصی نوشته شده اند . ببخشید این سوال را کرده ام شاید خنده دار باشد ولی من درباره رابطه وراثت در دلفی هیچ اطلاعاتی ندارم .

  10. #10
    منظور من دقیقا همان چیزی بود که شما پاسخ آن را دادید حال می خواستم بدانم این متدهای پدر و پدر بزرگ و غیره در کجای برنامه و با چه مشخصاتی تعریف شده اند . مثلا توابع را در قسمت خاصی می توانیم تعریف کنیم آیا این متدهای پدر و پدربزرگ در قسمتهای خاصی از برنامه و با مشخصات خاصی نوشته شده اند . ببخشید این سوال را کرده ام شاید خنده دار باشد ولی من درباره رابطه وراثت در دلفی هیچ اطلاعاتی ندارم
    اینجا ، مسئله متد نیست . مسئله کلاس است . اگر به جواب اول همین تاپیک دقت کنی ، اگر میخای جزئیات پیاده سازی چنین متدی رو ببینی باید به کلاس یا کلاسهای والد مراجعه کنی . برای این مقصود به محل تعریف کلاست مراجعه کن و ببین از کدوم کلاس مشتق شده . یک چیزی مثل همین :

    TChild = class (TParent)



    اگر میخای حجم قابل توجهی از کد رو بررسی کنی به زعم حقیر Code Explorer حضرت ModelMaker میتونه کمک های مفید و مؤثری بهت بکنه .



    هر چند میتونی با ابزارهای داخلی محیط دلفی و مطالعه متن کد هم به مقصودت برسی .


    آیا مقاله ای در زمینه وراثت و مبحث والد و روابط پدر و فرزند وجود دارد اگر وجود دارد آیا لینکی برای آن وجود دارد
    عده ای از صاحبنظران بر این باورند که وجود داشتن یک مقاله AND وجود نداشتن لینکی به اون مقاله ، محل اشکال است . فلذا اظهر آن است که اگر و فقط اگر لینکی وجود داره ، تصور کنیم مقاله ای وجود داره :evil2:

    برای اینکه بسیاری از ابهاماتت بر طرف بشه ؛ مطالعهء فصل دوم کتاب گرانقدر Delphi in a Nutshell رو بهت توصیه میکنم . اگر فاز نداد بگو لینک مقاله بهت بدیم .

    موفق باشید
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  11. #11
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56
    با تشکر از شما دوست عزیز
    من به لینکی که گفته بودید یه سری زدم خوب بود ولی اگر مقاله ای به زبان فارسی دارید برام لینک کنید ممنون می شوم چون زبان انگلیسیم زیاد خوب نیست . با تشکر

  12. #12
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1383
    پست
    56
    با سلام
    از دوستان عزیزی که جواب داده اند تشکر می کنم
    و سوال خودم را به این صورت تغییر می دهم که برنامه نویسی بصورت تکنولوژی وراثت یا همان رابطه پدر و فرزندی در دلفی چیست چه کاربردی دارد و چه مزیت هایی نسبت به برنامه نویسی معمولی دارد .

تاپیک های مشابه

  1. مشکل با inherited
    نوشته شده توسط حمیدرضاصادقیان در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: جمعه 11 اسفند 1385, 12:10 عصر
  2. Inherited چه می کند؟
    نوشته شده توسط MSK در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: چهارشنبه 28 مرداد 1383, 13:15 عصر
  3. inherited
    نوشته شده توسط دلفی زاده در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 3
    آخرین پست: شنبه 08 شهریور 1382, 22:36 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •