首页 > 其他 > 详细

C#中overload,override和overwrite的区别

时间:2014-03-18 05:42:16      阅读:514      评论:0      收藏:0      [点我收藏+]

1.overload (重载)关键字: 无

  A.使用的地方:同一类里。(其实是同一类里同一名称的方法不同版本的一种叫法)

  B.要重载的方法和被重载的方法要求:
    1),方法名称相同;
    2),参数列表不同: a或b;
      a),参数个数不同;
      b),参数个数相同,但至少有一个参数的类型不同;
    3),参数返回值类型不能作为重载区分的依据;

2.override (覆写)关键字: override

      使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
      不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。其中抽象方法是必须覆写的。
      也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或 override 方法。

      要求:相同的方法名称;相同的参数列表;相同的返回类型。

3.overwrite (重写)关键字:new
  A.overwrite不是C#的关键字;
  B.重写时使用的关键字是new;
  C.重写的方法,方法签名必须相同(方法名相同+参数列表不同+返回类型不做区分);
  D.new关键字重写,就像父类里不存在这些方法一样.
  E.如果子类中方法的签名和父类中相同,但是没有加new或者override关键字,此时编译器会发出警告.
    "子类方法"隐藏了继承的成员"父类方法", 如果是有意隐藏,请使用关键字 new.
  F.如果父类中没有该方法,却加了new关键字,编译器也会发出警告:
    成员“子类方法”不会隐藏继承的成员。不需要关键字 new
 
bubuko.com,布布扣
 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     }
View Code

 

如果子类没有重载(沒使用override关键字)而有和父类完全一樣的方法,如下代码:

bubuko.com,布布扣
 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
View Code

 

C#中overload,override和overwrite的区别,布布扣,bubuko.com

C#中overload,override和overwrite的区别

原文:http://www.cnblogs.com/xiubingege123456/p/3605210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!