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

نام تاپیک: تفاوت بین Virtual Method و Method Over Hidding در چیست؟

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران-غرب-شهران....
    پست
    146

    تفاوت بین Virtual Method و Method Over Hidding در چیست؟

    با سلام خدمت اساتید محترم
    این سوالی که در عنوان عرض کردم ذهن بنده در گیر کرده
    لطفا اگه ممکنه این تفاوت رو بیان بفرمایید.

  2. #2
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: تفاوت بین Virtual Method و Method Over Hidding در چیست؟

    در واقع method hiding صحیحه و مفهومی بنام over hiding نداریم دقیقا زمانی که شما نمیخواهید از متد شما شکل دیگری در کلاسهای فرزند استفاده بشه متد خودتون رو بصورت زیر hide میکنید :
    در اصل میخواهید بگید که کاری به کلاس بیس خودت نداشته باش و پیاده سازی خودت رو انجام بده
    using System;
    namespace Polymorphism
    {
    class A
    {
    public void Foo() { Console.WriteLine("A::Foo()"); }
    }

    class B : A
    {
    public new void Foo() { Console.WriteLine("B::Foo()"); }
    }

    class Test
    {
    static void Main(string[] args)
    {
    A a;
    B b;

    a = new A();
    b = new B();
    a.Foo(); // output --> "A::Foo()"
    b.Foo(); // output --> "B::Foo()"

    a = new B();
    a.Foo(); // output --> "A::Foo()"
    }
    }
    }

  3. #3
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران-غرب-شهران....
    پست
    146

    نقل قول: تفاوت بین Virtual Method و Method Over Hidding در چیست؟

    نقل قول نوشته شده توسط parvizwpf مشاهده تاپیک
    در واقع method hiding صحیحه و مفهومی بنام over hiding نداریم دقیقا زمانی که شما نمیخواهید از متد شما شکل دیگری در کلاسهای فرزند استفاده بشه متد خودتون رو بصورت زیر hide میکنید :
    در اصل میخواهید بگید که کاری به کلاس بیس خودت نداشته باش و پیاده سازی خودت رو انجام بده
    using System;
    namespace Polymorphism
    {
    class A
    {
    public void Foo() { Console.WriteLine("A::Foo()"); }
    }

    class B : A
    {
    public new void Foo() { Console.WriteLine("B::Foo()"); }
    }

    class Test
    {
    static void Main(string[] args)
    {
    A a;
    B b;

    a = new A();
    b = new B();
    a.Foo(); // output --> "A::Foo()"
    b.Foo(); // output --> "B::Foo()"

    a = new B();
    a.Foo(); // output --> "A::Foo()"
    }
    }
    }

    خیلی ممنون از راهنمایی شما

  4. #4
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران-غرب-شهران....
    پست
    146

    نقل قول: تفاوت بین Virtual Method و Method Over Hidding در چیست؟

    ببخشید در کد فوق میشه مفهوم

    a = new B();
    a.Foo(); // output --> "A::Foo()"

    را یه توضیح بدید.
    ممنون می شم.
    آخرین ویرایش به وسیله Mahmoud.Afrad : دوشنبه 24 اسفند 1394 در 09:49 صبح

  5. #5

    نقل قول: تفاوت بین Virtual Method و Method Over Hidding در چیست؟

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

    در مورد موضوع virtual و یا over

    این موضوع در وراثت معنی داره و وقتی شما میخواهید که متد شما در کلاس فرزند حتما override بشه یعنی کلاس فرزند پیاده سازی خودش رو از اون متد داشته باشه ان متد را با صورت virtual معرفی میکند تا کلاسهایی که از کلاس ما به ارث برده میشن این متد را خودشون پیاده کنند

    ولی اگر شما در کلاس پدر این متد را بدون کلمه virtual معرفی کنید کلاس فرزند میتونه (اختیاری ) ان متد را override بکنه و یا هیچ کاری باهاش نداشته باشه و از اون متد پدر استفاده کنه

  6. #6

    نقل قول: تفاوت بین Virtual Method و Method Over Hidding در چیست؟

    در مورد کد a = newB();a.Foo(); // output --> "A::Foo()"

    این موضوع وراثت را داره توضیح میده و اینکه در وراثت حالت is a برقرار هست یعنی اینکه کلاس B که از کلاس a

    ارث بری کرده همان (is a) کلاس a هست

  7. #7

    نقل قول: تفاوت بین Virtual Method و Method Over Hidding در چیست؟

    MethodOverriding-MethodHiding.jpg
    override متد کلاس پایه رو جایگزین میکنه. در حالی که new متد کلاس پایه رو پنهان میکنه
    کلمه کلیدی virtual باعث میشه که یک متد، پراپرتی، ایندکسر یا ایونتی که در کلاس پایه تعریف میشه، در کلاس های مشتق شده قابل جایگزین یا همان override کردن باشه
    متد، پراپرتی، ایندکسر یا ایونتی که به صورت virtual یا abstract تعریف شده باشه، با استفاده از کلمه کلیدی override در کلاس مشتق شده قابل جایگزین شدنه.
    کلمه کلیدی new برای پنهان کردن متد، پراپرتی، ایندکسر و یا ایونت های کلاس پایه استفاده میشه.
    Hiding در سی شارپ معادل Shadowing در vb است.

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

  1. سوال: تفاوت بین Constructor و Method overloading
    نوشته شده توسط haamidd در بخش C#‎‎
    پاسخ: 2
    آخرین پست: چهارشنبه 31 تیر 1394, 21:20 عصر
  2. سوال: تفاوت بین web developer و IIS و مشکل در اجرا با این دو
    نوشته شده توسط bikaraneha در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: یک شنبه 05 خرداد 1392, 21:18 عصر
  3. سوال: Virtual Method چیست؟
    نوشته شده توسط zeinalkhani1 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 10 آذر 1389, 06:52 صبح
  4. سوال: تفاوت بین Non Thread Safe و Thread Safe در ورژن 5.3 PHP
    نوشته شده توسط ali.e.v در بخش PHP
    پاسخ: 4
    آخرین پست: شنبه 07 شهریور 1388, 23:18 عصر
  5. تفاوت بین insert و insert into
    نوشته شده توسط tazekar در بخش T-SQL
    پاسخ: 1
    آخرین پست: دوشنبه 31 شهریور 1382, 20:49 عصر

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

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