1. 程式人生 > >C#中的隱藏和重寫

C#中的隱藏和重寫

使用下面的程式碼可以隱藏

 public class BaseClass
    {
        public void Show()
        {
            Console.WriteLine("BaseClass!");
        }
    }
    public class DerivedClass:BaseClass
    {
        public void Show()
        {
            Console.WriteLine("DerivedClass!");
        }
    }

儘管可以執行,不過會出一個警告:你試圖隱藏一個基類成員,如果是無意隱藏,可以修改。如果確實要隱藏可以使用new顯示錶明意圖
  public class BaseClass
    {
        public void Show()
        {
            Console.WriteLine("BaseClass!");
        }
    }
    public class DerivedClass:BaseClass
    {
         new public void Show()
        {
            Console.WriteLine("DerivedClass!");
        }
    }
加上new以後,警告消失

下面來看如何重寫

 public class BaseClass
    {
        public virtual void Show()
        {
            Console.WriteLine("BaseClass!");
        }
    }
    public class DerivedClass:BaseClass
    {
         public override void Show()
        {
            Console.WriteLine("DerivedClass!");
        }
    }
再來看看這兩種方式的區別
//重寫
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
  
    public class BaseClass
    {
        public virtual void Show()
        {
            Console.WriteLine("BaseClass!");
        }
    }
    public class DerivedClass:BaseClass
    {
         public override void Show()
        {
            Console.WriteLine("DerivedClass!");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            BaseClass baseclass = new BaseClass();
            DerivedClass derivedclass = new DerivedClass();

            baseclass.Show();//BaseClass!
            derivedclass.Show();//DerivedClass!

            baseclass = derivedclass;
            baseclass.Show();//DerivedClass!
        }
    }
}

//隱藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
  
    public class BaseClass
    {
        public virtual void Show()
        {
            Console.WriteLine("BaseClass!");
        }
    }
    public class DerivedClass:BaseClass
    {
         new public void Show()
        {
            Console.WriteLine("DerivedClass!");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            BaseClass baseclass = new BaseClass();
            DerivedClass derivedclass = new DerivedClass();

            baseclass.Show();//BaseClass!
            derivedclass.Show();//DerivedClass!

            baseclass = derivedclass;
            baseclass.Show();//BaseClass!
        }
    }
}