1).重寫(override)異步
override是重寫(覆蓋)了一個方法,以實現不一樣的功能,通常的用於子類在繼承父類時,重寫(從新實現)父類的方法,實現不一樣的需求。ide
重寫(覆蓋)的規則:spa
1.重寫的方法必須是virtual,abstract或者是override(virtual修飾符不能與static,abstract,private或override修飾符一塊兒使用,靜態屬性上使用virtual修飾符會報錯)。3d
2.重寫方法的參數列表必須徹底與被重寫的方法相同,不然不能稱爲重寫而是重載。code
3.重寫的方法的訪問修飾符必定要大於被重寫方法的訪問修飾符(public>protected>default>private)。blog
4.重寫的方法的返回值必須和被重寫的方法返回值一致。繼承
5.重寫的方法所拋出的異常必須和被重寫的方法所拋出的異常一致,或是其子類(eg:父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法就不能拋出Exception,只能拋出IOException的子類異常,能夠拋出非檢查異常)。string
6.被重寫的方法不能爲private,不然在其子類中只是定義了一個新的方法,並無對其重寫。it
7.靜態方法不能被重寫爲非靜態方法(會編譯出錯)。io
8.子類不能重寫父類中的final修飾的方法。
1 /// <summary> 2 /// 定能基類動物類 3 /// </summary> 4 /// <returns></returns> 5 public class Animal 6 { 7 public virtual void Eatting() 8 { 9 Console.WriteLine("用嘴吃飯!"); 10 } 11 } 12 13 #region 重寫(覆蓋原則) 14 15 public class Pople : Animal 16 { 17 public override void Eatting() //基類必須是virtual方法 18 { 19 Console.WriteLine("人用筷子吃飯!"); 20 } 21 } 22 23 public class Monkey : Animal 24 { 25 public new void Eatting() 26 { 27 Console.WriteLine("猴子直接用手吃飯!"); 28 } 29 } 30 31 32 #endregion 33 34 /// <summary> 35 /// 方法重載和衝寫的區別 36 /// </summary> 37 /// <param name="args"></param> 38 public static void Main(string[] args) 39 { 40 var pople = new Pople(); 41 (pople as Animal).Eatting(); //打印【人用筷子吃飯!】 42 pople.Eatting();//打印【人用筷子吃飯!】 43 44 var monKey = new Monkey(); 45 (monKey as Animal).Eatting();//打印【用嘴吃飯!】 46 monKey.Eatting();//打印【猴子直接用手吃飯!】 47 48 Console.ReadKey(); 49 }
2).重載(overload)
overload是重載,通常是用於在一個類實現若干重載的方法,這些方法的名稱相同參數不一樣。
重載的規則:
1.在使用重載時只能經過相同的方法名,不一樣的參數形式類實現。不一樣的參數類型能夠是不一樣的參數類型,不一樣的參數個數,不一樣的參數順序(參數類型必須不同)。
2.不能經過訪問權限,返回類型,拋出的異常進行重載。
3.方法的異步類型和數目不會對重載形成影響。
1 using System; 2 using System.Threading.Tasks; 3 4 namespace OverReadOverLoadDifference 5 { 6 class Program 7 { 8 #region 方法重載 9 10 /// <summary> 11 /// 定義計算類 12 /// </summary> 13 public class Calculation 14 { 15 public int sunMation(int a) 16 { 17 return a; 18 } 19 20 public int sunMation(int a, int b) 21 { 22 return a + b; 23 } 24 } 25 26 #endregion 27 28 /// <summary> 29 /// 方法重載 30 /// </summary> 31 /// <param name="args"></param> 32 public static void Main(string[] args) 33 { 34 #region 重載 35 var calculation = new Calculation(); 36 Console.WriteLine(calculation.sunMation(1)); 37 Console.WriteLine(calculation.sunMation(2, 3)); 38 #endregion 39 40 Console.ReadKey(); 41 } 42 } 43 }