overload override Virtual new区别

overload:同一个类中,相同名称的方法,它们或有不同的参数个数或有不同的参数类型。用于同一类中同名方法但参数个数或类型不同的实现,也就是让方法有不同签名的版本。通过参数的不同来区分。

    public string s()
{
return "";
}
public int s()//报错,已定义过一个名为“s”具有相同方法签名的方法
{
return 1;
}
  public int s(string t)//正确,方法签名不同
  {
    return 1;
  }

Override:方法覆盖。在子类中定义某方法与其父类有相同的名称和参数,子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。此关键字不可以用于重写非虚方法和静态方法,与其配套使用的关键字是Virtual、abstract、Override。与此同时,Override方法还不可以修改Virtual方法的可访问性,Override方法和Virtual方法必须具有相同的访问修饰符,不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。 如果方法是Virtual的,然后子类使用了override, 编译器就生产额外的代码。然后,在运行的时候,进行检测,看对象属于哪个类,然后调用这个类的方法。

 

Virtual: Virtual 关键字允许在派生类中重写这些对象,默认情况下,方法是非虚拟的,不可以重写非虚方法,virtual关键字不可以与static、abstract、private、override一起使用。Virtual关键字又是和override紧密不可分的,如果要实现Virtual方法就必须要使用override或new关键字(new和override产生的机理不同)。

总结:New关键字主要用来区别派生类和基类同名方法的选择问题,通过隐藏基类方法,达到使编译器调用正确的方法的目的。Override主要用来对基类的方  
               法和虚方法进行重写。



posted @ 2011-11-21 11:55  Rookier  阅读(269)  评论(0编辑  收藏  举报