1.overload (重载)关键字: 无
A.使用的地方:同一类里。(其实是同一类里同一名称的方法不同版本的一种叫法)
2.override (覆写)关键字: override
使用 override
修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。其中抽象方法是必须覆写的。
也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或
override 方法。
要求:相同的方法名称;相同的参数列表;相同的返回类型。
1 public class A 2 { 3 public void MethodF() 4 { 5 Console.WriteLine("A.F"); 6 } 7 public virtual void MethodG() 8 { 9 Console.WriteLine("A.G"); 10 } 11 } 12 public class B : A 13 { 14 new public void MethodF() 15 { 16 Console.WriteLine("B.F"); 17 } 18 public override void MethodG() 19 { 20 Console.WriteLine("B.G"); 21 } 22 } 23 class Test 24 { 25 static void Main() 26 { 27 B b; 28 b = new B(); 29 A a = b; 30 a.MethodF();//A.F 31 b.MethodF();//B.F 32 a.MethodG();//B.G 33 b.MethodG();//B.G 34 } 35 }
如果子类没有重载(沒使用override关键字)而有和父类完全一樣的方法,如下代码:
1 class A{ 2 public virtual void MA(string s) 3 {Console.WriteLine("class A:" + s);} 4 public virtual void MA(int i) 5 {Console.WriteLine("class A:" + i.ToString());} 6 } 7 8 class B:A{ 9 public override void MA(string s) //完全取代父类代码 10 {Console.WriteLine("class B:" + s);} 11 public new void MA(int i) //暂时隐藏父类代码 12 {Console.WriteLine("class B:" + i.ToString());} 13 } 14 15 void Main(){ 16 B b=new B(); 17 A a=(B)b; //convert B-->A 18 a.MA("li"); 19 a.MA(100);} 20 21 output: 22 class B:li 23 class A:100
C#中overload,override和overwrite的区别,布布扣,bubuko.com
C#中overload,override和overwrite的区别
原文:http://www.cnblogs.com/xiubingege123456/p/3605210.html