• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    C# new和override的区别分析

    昨天面试问到了new的几种用法以及与Override的区别,有点模糊

    回来google下,new的用法有以下3中

    1、运算符:初始化对象和调用构造函数

    2、修饰符:隐藏基类方法

    3、于在泛型声明中约束可能用作类型参数的参数的类型

    至于作为修饰符和override的区别,看了下文章不太明白,写了个例子,运行结果,发现了差异,下面分享下代码: 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace ConsoleApplication1
    {
      class Program
      {
        abstract public class Test
        {
          public virtual void Prinf()
          {
            Console.WriteLine("Abstract Printf...");
          }
     
        }
        public class Class1 : Test
        {
          public override void Prinf()
          {
             
            Console.WriteLine("Class One Override Printf...");
          }
        }
        public class Class2 : Test
        {
          public new void Prinf()
          {
             
            Console.WriteLine("Class Two New Printf...");
          }
        }
     
        static void Main(string[] args)
        {
          Class1 cls1 = new Class1();
          Class2 cls2 = new Class2();
          cls1.Prinf();
          cls2.Prinf();
          ((Test)cls1).Prinf();
          ((Test)cls2).Prinf();
          Console.ReadLine();
        }
      }
    }

    运行结果如下:

    相信大家也看明白了,原来是这样

    new隐藏基类方法后,通过转换为基类型,仍然可以调用基类的虚方法;

    而override则完全将基类的方法进行了重写,即使将子类型转换为基类型,调用的仍然是重写后的方法。。。

    所以new 是隐藏基类方法,而Override是重写基类方法咯

    override是指“覆盖”,是指子类覆盖了父类的方法。子类的对象无法再访问父类中的该方法。new是指“隐藏”,是指子类隐藏了父类的方法,当然,通过一定的转换,可以在子类的对象中访问父类的方法。所以说C# new和override的区别是覆盖和隐藏

        以下是代码:

    class Base 
    {
    	public virtual void F1() 
    	{
    		Console.WriteLine("Base's virtual function F1");
    	}
    	public virtual void F2() 
    	{
    		Console.WriteLine("Base's virtual fucntion F2");
    	}
    }
    class Derived:Base 
    {
    	public override void F1() 
    	{
    		Console.WriteLine("Derived's override function F1");
    	}
    	public new void F2() 
    	{
    		Console.WriteLine("Derived's new function F2");
    	}
    }
    class Program 
    {
    	public static void Main(string[] args) 
    	{
    		Base b1 = new Derived();
    		//由于子类覆盖了父类的方法,因此这里调用的是子类的F1方法。也是OO中多态的体现 
    		b1.F1();
    		//由于在子类中用new隐藏了父类的方法,因此这里是调用了隐藏的父类方法 
    		b1.F2();
    	}
    }

    您可能感兴趣的文章:
    • c#中的interface abstract与virtual介绍
    • 深入理解C# abstract和virtual关键字
    • C#中abstract的用法详解
    • 深入解析C#中的abstract抽象类
    • 深入理解C#中new、override、virtual关键字的区别
    • C#中Override关键字和New关键字的用法详解
    • C#中Abstract 、Virtual和Override的使用及区别
    上一篇:几种using 的用法小结
    下一篇:Asp.Net防止刷新重复提交数据的办法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    C# new和override的区别分析 new,和,override,的,区别,分析,