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

نام تاپیک: method hiding

  1. #1

    method hiding

    سلام
    دوستان اینجا در کلاش مشتق شده، ما چه در متد new رو بزاریم و چه نزاریم. هیچ فرقی نمی کنه. فقط یک warning رو از بین بردیم اگر new رو قبل از نوع برگشتی متد بزاریم.
    منتها همش حرف از این زده که اگر new رو نزاریم، نمیدونم متد پنهان میشه و خلاصه کامپایلر نمیدونه کدام متد رو صدا بزنه و میره متد base رو صدا میزنه
    منتها ما هر چی تست زدیم هیچ فرقی نکرد!


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


    namespace Sample4
    {


    class BaseClass
    {
    public void Method1()
    {
    Console.WriteLine("Base - Method1");
    }
    public void Method2()
    {
    Console.WriteLine("Base - Method2");
    }
    }


    class DerivedClass : BaseClass
    {
    public void Method2()
    {
    Console.WriteLine("Derived - Method2");
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    BaseClass bc = new BaseClass();
    DerivedClass dc = new DerivedClass();
    BaseClass bcdc = new DerivedClass();

    bc.Method1();
    dc.Method1();
    dc.Method2();
    bcdc.Method1();
    bcdc.Method2();




    Console.ReadLine();
    }
    }
    }







    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


    namespace Sample4
    {


    class BaseClass
    {
    public void Method1()
    {
    Console.WriteLine("Base - Method1");
    }
    public void Method2()
    {
    Console.WriteLine("Base - Method2");
    }
    }


    class DerivedClass : BaseClass
    {
    public new void Method2()
    {
    Console.WriteLine("Derived - Method2");
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    BaseClass bc = new BaseClass();
    DerivedClass dc = new DerivedClass();
    BaseClass bcdc = new DerivedClass();

    bc.Method1();
    dc.Method1();
    dc.Method2();
    bcdc.Method1();
    bcdc.Method2();




    Console.ReadLine();
    }
    }
    }




    کلا به صورت تخصصی تر اگر بخواهیم بگیم، این کلمه new داره چی کار میکنه؟ چون اصولا new یک حافظه ای تخصیص میده. اینجا چطور؟
    آخرین ویرایش به وسیله Mahmoud.Afrad : یک شنبه 04 مرداد 1394 در 03:41 صبح

  2. #2

    نقل قول: method hiding

    سلام.
    warning به شما هشدار میده که حواست باشه به متد کلاس پدر دسترسی نداری، این متدی که تو کلاس فرزند نوشتی اجرا میشه نه متد کلاس پدر.
    به نظر میاد با کلمه new میگی که این یه متد جدیده و متد کلاس پدر نیست!!!.
    نکته: اگر بخواید از متد کلاس پدر استفاده کنید از virtual - override استفاده کنید، در غیر اینصورت متد کلاس پدر را از دست خواهی داد.
    class BaseClass
    {
    public void Method1()
    {
    Console.WriteLine("Base - Method1");
    }
    public virtual void Method2()
    {
    Console.WriteLine("Base - Method2");
    }
    }

    class DerivedClass : BaseClass
    {
    public override void Method2()
    {
    Console.WriteLine("Drived - Method2");
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    DerivedClass derived = new DerivedClass();
    derived.Method2();
    Console.ReadKey();
    }
    }

  3. #3

    نقل قول: method hiding

    دوست عزیز شما چه new رو بنویسی و چه ننویسید، همان متد کلاس پدر فراخوانی میشه
    شما می فرمائید new رو می نویسم که بگیم این مال پدر نیست و جدید هست؟ خوب باز هم مال پدر رو صدا میزنه
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


    namespace Sample4
    {


    class BaseClass
    {
    public void Method1()
    {
    Console.WriteLine("Base - Method1");
    }
    public void Method2()
    {
    Console.WriteLine("Base - Method2");
    }
    }


    class DerivedClass : BaseClass
    {
    public new void Method2()
    {
    Console.WriteLine("Derived - Method2");
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    BaseClass bc = new BaseClass();
    DerivedClass dc = new DerivedClass();
    BaseClass bcdc = new DerivedClass();

    bc.Method1();
    dc.Method1();
    dc.Method2();
    bcdc.Method1();
    bcdc.Method2();




    Console.ReadLine();
    }
    }
    }



  4. #4

    نقل قول: method hiding

    تو این حالت به متد کلاس پدر دسترسی ندارید و یک متد جدید ایجاد کردید اما متد کلاس پدر مخفی است و با کلمه new میگیم که حواسمون هست که این متد همنام با متدی در کلاس پدر است و متد کلاس پدر مخفی میشه و از warning جلوگیری میکینم.
    شما منظورتون این خطه:
    BaseClass bcdc = new DerivedClass();
    تو این خط از سازنده کلاس فرزند استفاده شده و Method2 هم در کلاس پدر و هم در کلاس فرزند است( متد کلاس پدر در کلاس فرزند مخفی است) و کلاس پدر فضای مورد نیاز متدی که در خودش است را تامین میکند(دو متد جدا داریم یکی در کلاس پدر و دیگری در فرزند) و کاری با متد کلاس فرزند ندارد (اصلا متد کلاس فرزند را ندارد).
    آخرین ویرایش به وسیله ناامید : شنبه 03 مرداد 1394 در 23:17 عصر

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

  1. Hide JVM Console Window
    نوشته شده توسط Mahmood_Parvazi در بخش برنامه‌نویسی جاوا
    پاسخ: 2
    آخرین پست: دوشنبه 07 دی 1383, 11:00 صبح
  2. Hide در oncreate
    نوشته شده توسط aminadibi در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: دوشنبه 05 مرداد 1383, 00:44 صبح
  3. Hide کردن نشانگر ماوس
    نوشته شده توسط HamidVB در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: یک شنبه 14 تیر 1383, 08:51 صبح
  4. Http Methods
    نوشته شده توسط Developer Programmer در بخش امنیت در شبکه
    پاسخ: 1
    آخرین پست: سه شنبه 09 تیر 1383, 09:40 صبح

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

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