1. 程式人生 > >C#:區分:重寫、覆蓋和過載以及虛方法和抽象方法

C#:區分:重寫、覆蓋和過載以及虛方法和抽象方法

(一)重寫和覆蓋:

重寫:
在宣告時,父類的方法前面加上virtual關鍵字,子類的方法前面加上override關鍵字,且與父類方法同名,表示父類的方法可以被子類進行修改和重新定義。
覆蓋:
在宣告子類方法的時候,新增new關鍵字,定義與父類同名的方法,稱為覆蓋。
區別:
當用子類建立父類的時候,重寫呼叫的是子類中的功能,而覆蓋呼叫的仍然是父類的功能。用子類建立子類和用父類建立父類的時候,則相應的進行呼叫。

下面是當子類建立父類時,重寫和覆蓋的區別的程式碼:

using System;
using System.Collections.Generic;
using System.Linq;
using
System.Text; using System.Threading.Tasks; namespace 重寫和覆蓋 { class Program { static void Main(string[] args) { C1 c1 = new C2(); Console.WriteLine("重寫後的c1應該是:SonOverride; 螢幕顯示是:{0}",c1.FClass()); C3 c3 = new C4(); Console.WriteLine("覆蓋後的c3應該是:NewFather; 螢幕顯示是:{0}"
, c3.nFClass()); Console.ReadKey(); } #region 重寫方法的函式 public class C1 { public virtual string FClass() { return "FatherOverrride"; } } public class C2 : C1 { public override string FClass() { return
"SonOverride"; } } #endregion #region 覆蓋方法的函式 public class C3 { public string nFClass() { return "NewFather"; } } public class C4 : C3 { public new string nFClass() { return "NewSon"; } } #endregion } }

這裡寫圖片描述

(二)過載和覆蓋

過載:
函式過載允許建立多個同名函式,每個函式可使用不同的引數型別。優點是不必顯示地指定要使用哪個函式,只需要提供一個數組引數,就可以根據引數型別執行相應的函式。
覆蓋:
參考(一)。
區別:
過載是發生在同一個類中,覆蓋是發生在一個父類和一個子類之間。

下面是過載的程式碼:

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

namespace 函式過載
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] myArray1 = {1,2,3,100,5,6};
            double[] myArray2 = {1.1,50.8,21,3.4,5};
            int intmaxVal = MaxValue(myArray1);
            double doublemaxVal = MaxValue(myArray2);
            Console.WriteLine("int型別的返回最大值為{0}\ndouble型別的返回最大值為{1}",intmaxVal,doublemaxVal);
            Console.ReadKey();
        }

        static int MaxValue(int[] myArray)
        {
            int maxValue = myArray[0];
            for (int i = 0; i < myArray.Length;i++ ) {
                if(maxValue<myArray[i]){
                    maxValue=myArray[i];
                }
            }
            return maxValue;
        }
        static double MaxValue(double[] myArray)
        {
            double maxValue = myArray[0];
            for (int i = 0; i < myArray.Length; i++)
            {
                if (maxValue < myArray[i])
                {
                    maxValue = myArray[i];
                }
            }
            return maxValue;
        }

    }
}

這裡寫圖片描述

(三)虛方法和抽象方法

虛方法:用virtual關鍵字
使用方法:
(1)可以在子類(派生類)中用override重寫父類(基類)的方法
(2)可以在子類中直接由物件呼叫,使用基類中的方法
抽象方法:用abstract關鍵字
抽象方法是隻有定義、沒有實際方法體的函式,它只能在抽象函式中出現,並且必須在子類中重寫。