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

نام تاپیک: Overriding constructor

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799

    Overriding constructor

    سلام.
    چطور میتونم constructor یه کلاسی رو که ساختم و از TObject مشتق شده رو override کنم ؟ من برای این کار در یونیت سیستم به عبارت constructor کلاس tobject ، دایرکتیو virtual رو اضافه کردم و یه constructor آور رید شده برای کلاس خودم نوشتم..
    اما در هنگام کامپایل ، کامپایلر میگه که can not override a statick method
    میخواستم بدونم علتش چیه که با وجود ایرکتیو virtual اون رو statick میبینه ؟؟؟؟ :cry: یه سوال دیگه هم داشتم ... چه طور میشه از یونیت های کامپایل شده (.dcu) در دلفی استفاده کرد ؟

    ممنون.

  2. #2


    type
    Tur-class = class(Tobject)
    public
    constructor Create(AOwner: TComponent); override;
    end;

    ** .....

    constructor Tur-class.Create(AOwner: TComponent);
    begin
    inherited Create(AOwner);

    *** // bagheye code ha
    ...
    end;



    به همین سادگی . :roll:

  3. #3
    در جواب سوال دومت :

    یونیت مورد نظرت رو در دایرکتوری Lib دلفی کپی کن و هرجا میخای ازش استفاده کنی اسمش رو بعد بعد از Uses همون یونیت ذکر کن .

    موفق باشی

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    30/11/53
    پست
    243
    با اجازه عمو Inprise دو تا چیز هست که باید بگم.
    اول اینکه فایلت باید مال همین ورژن دلفی باشه یعنی اگه با دلفی 5 کامپایل شده باشه نمی تونی توی دلفی 6 یا 7 ازش استفاده کنی و باید سورس رو داشته باشی.
    دوم اینکه غیر از کپی یه را دیگه هم هست : از منوی Tools بخش Environment Options و بعد برو به صفحه Library و در قسمت Library Path مسیر فایل dcu رو وارد کن.
    موفق باشی

  5. #5
    دوست عزیز

    من از توابعی که در دلفی 2 نوشتم هنوز تو دلفی 7 استفاده میکنم ! این تصور که شما داری غلطه .

    ممکنه نسخه های جدیدتر دلفی تفاوتهائی با نسخه های قدیمی تر داشته باشند که این مربوط به تغییر ورژن نیست بلکه مربوطه به تغییراتی است که در محیط توابع کتابخانه ای و اطلاعات آر تی ال و محل تعریف متغیرهای سراسری رخ میده . به عنوان مثال تمام تعاریف مربوطه به ورینت از دلفی 6 به بعد در یونیت جداگانه ای قرار دارند بر خلاف نسخه های قبلی که در یونیت سیستم قرار داشتند لذا اگر ماژولی داشته باشی که با دلفی 5 کامپایلش کرده باشی و ضمنا داخل از ورینت ها استفاده کرده باشی در نسخه های 6 و 7 اجرا نمیشه . نتیجتا این مساله که کامپوننتها و ماژولهای یک نسخه در نسخه های بالاتر کار نمیکنند کلیت نداره و اگر شامل تغییرات موجود در نسخه جدید نباشه بخوبی هم کار خواهند کرد .

    موفق باشید .

  6. #6
    کاربر دائمی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    30/11/53
    پست
    243
    خوب این درسته ولی شما سورس رو داری .pas و دوباره کامپایلش می کنی نه اینکه همون فایل dcu رو بخوای استفاده کنی

  7. #7
    نخیر عزیزم . من دقیقا از Dcu ها استفاده میکنم .

  8. #8
    کاربر دائمی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    30/11/53
    پست
    243
    خوب چه جوری؟ تا اونجایی که من امتحان کردم ( بخصوص در مورد dpk ها) دلفی پیغام می ده و فایل pas رو می خواد.

  9. #9
    درست همونطوری که اون بالا گفتم ! :roll:

  10. #10
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    با سلامی دوباره.
    اینپرایز جان خوب بود اول یه امتحانی میکردی ... بازم همون ایراد رو میگیره.
    اما نطر خودم اینه که چون ما برای ساختن یه شی از متد Create اون کلاس به صورت مستقیم استفاده میکنیم پس اصلا نیازی به override کردن نداریم و یه متد create جدید ایجاد میکنیم ! :wink:

  11. #11
    دوست عزیز

    اگر نیازی به Override کردن کانستراکتور کلاس داشته باشید باید متد Create کلاس پدر رو حتما Override کنی . بنده سالهاست دارم اینکار رو انجام میدم . چی رو امتحان میکردم ؟؟ یقینا در کد نویسی اشتباه میکنی یا تعریف کلاست ایراد داره .

    موفق باشی

  12. #12

    Overriding Constructors

    من برای این کار در یونیت سیستم به عبارت constructor کلاس tobject ، دایرکتیو virtual رو اضافه کردم و یه constructor آور رید شده برای کلاس خودم نوشتم.. اما در هنگام کامپایل ، کامپایلر میگه که can not override a statick method میخواستم بدونم علتش چیه که با وجود ایرکتیو virtual اون رو statick میبینه ؟؟؟؟
    صحیح نیست در کد کلاس های قبلی دست ببرید. با این حال اگر در یکی از یونیت های VCL تغییر ایجاد کردید برای اینکه نسخه جدید کامپایل شود و مورد استفاده قرار گیرد لازم است مسیر آن را در Library Path قبل از مسیرهای حاوی نسخه کامپایل شده یونیت ها قرار دهید.
    اما در مورد یونیت System تفاوتی وجود دارد؛ این یونیت بعنوان بخشی از کامپایلر قرار گرفته است و مجددا کامپایل نمی شود.

    چطور میتونم constructor یه کلاسی رو که ساختم و از TObject مشتق شده رو override کنم ؟
    سازنده Create در TObject مجازی تعریف نشده و بنابراین نمی توانید آن را override کنید. یک سازنده جدید در کلاس خود تعریف کنید. در TObject سازنده Create هیچ کار ویژه ای انجام نمی دهد و احتمالا به همین دلیل Static تعریف شده است، و نیازی هم نیست در سازنده خود از inherited استفاده کنید.
    کدی که Inprise در بالا نوشته اشتباه است، احتمالا کلاس پایه TComponent بوده.

    اما نطر خودم اینه که چون ما برای ساختن یه شی از متد Create اون کلاس به صورت مستقیم استفاده میکنیم پس اصلا نیازی به override کردن نداریم و یه متد create جدید ایجاد میکنیم
    همیشه اینگونه نیست. اگر یک سازنده بصورت مجازی تعریف شده پس به رفتار چندریختی نیاز وجود داشته است و شما قاعدتا آن را override خواهید کرد.

  13. #13

    استفاده از یونیت های کامپایل شده (.dcu)

    بدون داشتن سورس فقط با همان نسخه از کامپایلر و به شرط تغییر نکردن یونیت های مرتبط از زمان آخرین کامپایل قابل استفاده اند.

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

  1. Override کردن Property Calendar در دات نت 2
    نوشته شده توسط Identifier در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: پنج شنبه 16 شهریور 1385, 14:16 عصر
  2. Constructor
    نوشته شده توسط benyamin_pc در بخش C#‎‎
    پاسخ: 6
    آخرین پست: شنبه 14 مرداد 1385, 14:52 عصر
  3. Overload و Override در ++C
    نوشته شده توسط saeedIRHA در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 4
    آخرین پست: چهارشنبه 03 خرداد 1385, 10:52 صبح
  4. اندر احوالات Virtual و Override
    نوشته شده توسط Developer Programmer در بخش برنامه نویسی در Delphi
    پاسخ: 7
    آخرین پست: یک شنبه 10 اردیبهشت 1385, 08:24 صبح
  5. Overriding operators
    نوشته شده توسط Farhad.B.S در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 04 مهر 1382, 13:06 عصر

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

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