zoukankan      html  css  js  c++  java
  • 浅析C#中new、override、virtual关键字的区别

    最近偶简单的复习了下在C#中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来,方便大家查阅。在微软的一次笔试和面试中也提到了这个问题:

    一、在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主要用来对基类的方 
                   法和虚方法进行重写。

  • 相关阅读:
    Oracle 11g SQL Fundamentals Training Introduction02
    Chapter 05Reporting Aggregated data Using the Group Functions 01
    Chapter 01Restriicting Data Using The SQL SELECT Statemnt01
    Oracle 11g SQL Fundamentals Training Introduction01
    Chapter 04Using Conversion Functions and Conditional ExpressionsConditional Expressions
    Unix时代的开创者Ken Thompson (zz.is2120.bg57iv3)
    我心目中计算机软件科学最小必读书目 (zz.is2120)
    北京将评估分时分区单双号限行 推进错时上下班 (zz)
    佳能G系列领军相机G1X
    选购单反相机的新建议——心民谈宾得K5(转)
  • 原文地址:https://www.cnblogs.com/tomin/p/1415755.html
Copyright © 2011-2022 走看看