博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
override和new的区别【摘】
阅读量:6268 次
发布时间:2019-06-22

本文共 1569 字,大约阅读时间需要 5 分钟。

 

override

1. override是派生类用来重写基类中方法的;

2. override不能重写非虚方法和静态方法;

3. override只能重写用virtual、abstract、override修饰的方法;

4. 不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

new

1. new是派生类用来隐藏基类中的方法的;也就是说在派生类中“看不到”基类中的方法;

2. 如果要在派生类中隐藏(不是重写)基类中的方法,而没有使用new关键字,编译时会出现一个警告,提示如果是要隐藏基类中的方法,请使用new关键字;

3. 派生类可以隐藏基类中的虚方法,也可以隐藏基类中的普通方法。

4. 如果在派生类中用private来修饰new 方法,那么只在该派生类中隐藏了基类中的方法,在该派生类之外,相当于没有隐藏基类中的方法;

5. 如果在派生类中隐藏了基类中的方法,在该派生类的派生类中,将延续对该派生类对基类方法的隐藏。

 

代码示例

namespace Test{    public class A    {        public virtual void Myvirtual()        {            Console.WriteLine(DateTime.Now);        }        public virtual void New_Myvirtual()        {            Console.WriteLine(DateTime.Now);        }    }    class B : A    {        public new void Myvirtual()        {            Console.WriteLine("The Time Is:" + DateTime.Now);        }        public override void New_Myvirtual()        {            Console.WriteLine("NEW_The Time Is:" + DateTime.Now);        }    }    class Test    {        public static void Main()        {            B b = new B();            b.Myvirtual();            b.New_Myvirtual();            Console.WriteLine();            A c = (A)b;            c.Myvirtual();     //调用基类的方法            c.New_Myvirtual();//调用b的实例方法        }    }}//输出结果//The Time Is:2014/7/26 10:58:39//NEW_The Time Is:2014/7/26 10:58:39//2014/7/26 10:58:39//NEW_The Time Is:2014/7/26 10:58:39
View Code

 

由此得出结论:

1.派生类中用new实现基类的同名方法,把派生类强制转换为基类型时,将调用基类中的实现;
2.相反,派生类中用override 实现基类的virtual 同名方法,把派生类强制转换为基类型时,仍将调用派生类自己的实现。

 

摘自  ,

转载于:https://www.cnblogs.com/wipphj/p/3869774.html

你可能感兴趣的文章
SQL经典面试题集锦
查看>>
View学习(一)-DecorView,measureSpec与LayoutParams
查看>>
色彩力量!21款你应该知道的优秀品牌设计
查看>>
SDUT 3503 有两个正整数,求N!的K进制的位数
查看>>
【.Net】C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径...
查看>>
Redis常用命令速查 <第二篇>
查看>>
CSS规范
查看>>
使用FastDateFormat来代替JDK自带的DateFormat
查看>>
Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
查看>>
Android源代码解析之(三)--&gt;异步任务AsyncTask
查看>>
(zhuan) 自然语言处理中的Attention Model:是什么及为什么
查看>>
C#中使用RabbitMQ收发队列消息
查看>>
Hadoop1.2.1 全然分布式集群搭建实操笔记
查看>>
第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
查看>>
MVC总结--MVC简单介绍以及和WebForm差别
查看>>
tiny4412 裸机程序 五、控制icache【转】
查看>>
VB.NET多线程入门
查看>>
国外物联网平台初探(二) ——微软Azure IoT
查看>>
findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)...
查看>>
Android事件分发机制源代码分析
查看>>