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 }