کلاس virtual و override در سی شارپ چیست ؟

سوال

سلام خدمت دوستان ، لطفا کسی میتونه در مورد کلاس virtual و override در سی شارپ توضیح بده ؟ ممنون میشم

در حال بررسی 0
Alireza 5 سال 4 پاسخ ها 3522 دیده شده 1

پاسخ ها ( ۴ )

  1. با سلام این سایت به صورت کامل توضیح داده
    roxo.ir/abstract-override-virtual-sealed-csharp

  2. سلام دوست عزیزم

    ببینید کلمه ی virtual یک modifre هست و هیچوقت به خود کلاس انتساب داده نمیشه فی الواقع مختص متدهای کلاس هست…

    سناریویی رو در نظر بگیرید که میخواهیم یک برنامه کاربردی برای یک سازمان (مثلا یکی از ادارات)

    حتما موافقید یکی از معمول ترین عملیات “محاسبه سود ماهانه است…

    احتمالا یک کلاس کلی داریم برای اینکه بقیه قسمت های ادارات از اون ارث بری کنند برای اینکه از یک سری خصوصیات عمومی رو اشتراک داشته باشند…ما اسم این کلاسو BaseOffice در نظر میگیریم.اتفاقا یکی از اون خصوصیات و رفتارهای مشترک “محاسبه سود” هست..که ما اینو توی کلاس BaseOffice میذاریم و بقیه قسمت های اداره نیز از این کلاس ارث بری کردند…

    پس تا اینجا یاد گرفتیم که هدف کلاس Base Office چیه و اینکه متدی هم توی اون درست کردیم که سود رو حساب میکنه. و بقیه زیر قسمت های اداره هم از اون استفاده میکنن…

    بیایید باهم بررسی کنیم که چطوری میتونیم ازش استفاده کنیم

    میشه گفت علاوه بر متعدد روش هایی که میشه از این متد محاسبه سود استفاده کرد به ۲ صورت بسیار کاربردیه:

    ۱- استفاده از این متد در دورن متد دیگه ای

    ۲- بازنویسی(override) کردن متد در کلاس

    خب بریم سراغ اولی

    فرض کنید متدی داریم به نام PrintReport که گزارش چاپ میکنه اما نیاز داریم اطلاعاتش رو تامیین کنیم!

    در نتیجه متد محاسبه سود رو توی این متد صدا میزنیم و داده هارو از اون میگیریم در نهایت میریم سراغ فرایند گزارش گیری و تمام.

    حالابریم سراغ مورد دوم یعنی بازنویسی (override) که میشه پاسخ قسمت دوم سوالتون

    خب قدم به قدم جلو میریم

    توی یکی از کلاس های فرزند قصد داریم متد محاسبه سود را بازنویسی کنیم

    سوال : چرا بازنویسی؟فایده اینکار چیه؟

    فرض کنید یکی از زیر ادارات کلابحث محاسبه سودش متفاوته!!! یا اینکه محاسبه سود اون زیر اداره باید با چند فرمول دیگه ترکیب بشه!

    حالا ما با بازنویسی کردن این مزیت رو داریم که میتونیم کلا محاسبه سود رو که قبلا نوشتیم به کل فراموش کنیم! و دوباره نویسی کنیم(override) یا اینکه بخشی از اون محاسبه رو از اون متد بخوایمم و بقیه ش رو خودمون بنویسیم!

    امیدوارم خوب مطلب رو گفته باشم

    “نکته ی مهم اینه که یکی از زیبا ترین قسمت ها و کاربرد های virtual در کلاس های انتزاعی (Abstract) هست.”

    در پایین هم یک شبه کدی ساده آماده کردم امیدوارم که به دردتون بخوره -موفق باشید

     

     

  3. سلام

    تعریف متد Overriding

    متدی که در کلاس فرزند بازنویسی مجدد گردد متد Overriding می گویند. به عبارتی متدی است که بتوان بدنۀ یک متد را در کلاس فرزند از نوع و یک جور دیگر نوشت.

    متدهای Virtual به یک جدولی به نام VMT افزوده می شوند دارای یک شا خص پنهان هستند و به هنگام تعیین رویه ها در هنگام فراخوانی از آن شاخص استفاده می شوند (در هنگام اجرا توسط سیستم عامل تعیین می شود) متد های پویا Dynamic در یک جدول DMT افزوده می شوند حفظ و نگهداری VMT و DMT بر عهده کامپایلر می باشد
    خود از نظر کاری بهطور سادهتقریبا مشابه هستند و هر دو به مفهوم این هستند که زیر کلاسی از روی آن ایجاد خواهد شد و رفتار متد تغییر خواهد کرد در هر دو شرایط در کلاس وارث برای تغییر از کلمه کلیدی Override استفاده می کنیم

  4. سلام وقت بخیر، شما میتونید دوره سی شارپ چیست ؟ به صورت رایگان مشاهده کنید

ارسال یک پاسخ