c#中virtual,new和override的区别

如题所述

  一、在C#中,new这个关键字使用频率非常高,主要有3个功能:
  a) 作为运算符用来创建一个对象和调用构造函数。
  b) 作为修饰符。
  c) 用于在泛型声明中约束可能用作类型参数的参数的类型。
  在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说在使用派生类的方法是调用的方法是New关键字新定义出来的方法,而不是基类的方法。在不使用New关键字来隐藏基类方法也是可以的,编译器会出现一个警告,提示如果有意去隐藏基类的方法,请使用New关键字修饰。
  这里有个注意事项就是New和Override这两个关键字是互斥的。不可以同时使用。
  二、 Override关键字主要是提供派生类对基类方法的新实现,重写的基类方法必须和Override的方法具有相同的签名, 此关键字不可以用于重写非虚方法和静态方法,与其配套使用的关键字是Virtual、abstract、Override。与此同时,Override方 法还不可以修改Virtual方法的可访问性,Override方法和Virtual方法必须具有相同的访问修饰符,不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。
  以下是一个小demo,展示了new和override的本质区别:
  
  class Program
  {
  static void Main(string[] args)
  {
  contact ct1 = new class1();
  contact ct2 = new class2();
  ct1.prinf();
  ct2.prinf();
  }
  }
  abstract public class contact
  {
  public virtual void prinf()
  {
  Console.WriteLine ("这是虚方法");
  }
  }
  public class class1 : contact
  {
  public override void prinf()
  {
  Console.WriteLine ("这是新的方法");
  }
  }
  public class class2 : contact
  {
  public new void prinf()
  {
  Console.WriteLine ("这是另一个新的方法");
  }
  }
  此demo运行结果为:
  这是新的方法
  这是虚方法
  三、 Virtual 关 键字允许在派生类中重写这些对象,默认情况下,方法是非虚拟的,不可以重写非虚方法,virtual关键字不可以与static、abstract、 private、override一起使用。Virtual关键字又是和override紧密不可分的,如果要实现Virtual方法就必须要使用 override或new关键字(new和override产生的机理不同)。
  总结:New关键字主要用来区别派生类和基类同名方法的选择问题,通过隐藏基类方法,达到使编译器调用正确的方法的目的。Override主要用来对基类的方
法和虚方法进行重写。
温馨提示:内容为网友见解,仅供参考
无其他回答

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

c#中virtual、override、new的区别
【区别】virtual与abstract virtual:用于父类中声明该方法可被重写。 abstract:只能用在抽象类中声明抽象方法,本身不能实现任何功能(因此必须在子类中override),不能实例化。 两者除了在子类中同样可以用override重写这个相同点之外,没有其他关系。 

简单几句话讲明白C#中的成员修饰符new与override的区别
在C#中,成员修饰符new与override的区别在于它们如何影响对象调用基类与派生类中的同名方法。当父类引用指向子类对象时,使用override重写方法时,执行的是子类的方法;而使用new覆盖时,则执行的是父类的方法。这主要取决于引用的类型和指向的对象类型。让我们通过代码来直观理解new与override的用法。例如,...

C#中用父类引用去调用子类实例方法有哪些?
virtual、override、new之一声明,也可以是没有特殊标识的普通方法,运行时会根据引用的类型选择调用父类还是子类的方法,重写父类方法时,使用new关键字与使用没有特殊标识的普通方法是等效的,但是后者会给出一个编译警告。

c#中virtual, abstract和override的区别和用法?
override void method(){\\x0d\\x0a 新代码...;\\x0d\\x0a}\\x0d\\x0a但abstract只能在抽象类中使用\\x0d\\x0aoverride就是派生类重写父类方法(包括虚方法、抽象方法,接口方法)时的关键字,反正你要重写方法,就使用override声明

C#中的virtual和override关键字
对于属性、事件和索引器,`virtual`和`override`的概念同样适用。例如,只读属性可以通过这两个关键字实现不同级别的访问和重写。下面是一个只读属性的例子:只读属性的`virtual`和`override`用法:运行结果:只读属性的重写规则遵循与方法相同的逻辑。总的来说,`virtual`和`override`在C#中是实现多态和...

C#在派生类中定义与基类中同名的方法那几种可能的情况是?
1。override:在基类中定义virtual 方法,在派生类中使用override表示覆盖。2。new:在派生类中使用new修饰关键字(new是默认的,所以你不加new的话,默认你覆盖同名方法,但是在编译的时候会产生一个Warning);两者的区别在于将派生类转化为基类的时候,调用同名函数,结果真正调用的是不同的。

C#中Virtual与override分别有什么用途
virtual修饰的方法为虚方法,暗示其子类最好有自己的实现 override修饰的方法为重写方法,表示覆盖了基类原有方法的实现 virtual修饰的方法 其子类除了override 还可用new来修饰

C#中Virtual与override分别有什么用途
Virtual用在父类中表示该方法或属性可以在子类中重写,override用在子类中表示重写父类的方法或属性

c#中virtual, abstract和override的区别和用法?
Virtual关键字又是和override紧密不可分的,如果要实现Virtual方法就必须要使用 override或new关键字(new和override产生的机理不同)。总结:New关键字主要用来区别派生类和基类同名方法的选择问题,通过隐藏基类方法,达到使编译器调用正确的方法的目的。Override主要用来对基类的方法和虚方法进行重写。

相似回答