C#学习笔记(16)——C#中重写(override)和覆盖(new)的区别
说明(2017-7-17 23:04:45):
原文:
C#中重写(override)和覆盖(new)的区别
重写
重写会改变父类方法的功能。
看下面演示代码:
#region 重写 public class C1
{
public virtual string GetName()
{
return "叔祥";
}
} public class C2 : C1
{
public override string GetName()
{
return "xiangshu";
}
} C1 c1 = new C1();
Console.WriteLine(c1.GetName());//输出“祥叔” C2 c2 = new C2();
Console.WriteLine(c2.GetName());//输出“xiangshu” //重点看这里 C1 c3 = new C2();
Console.WriteLine(c3.GetName());//输出“xiangshu” #endregion
在子类中用 new 关键字修饰 定义的与父类中同名的方法,叫覆盖。
看下面演示代码:
#region 覆盖 public class C1
{
public string GetName()
{
return "祥叔";
}
} public class C2 : C1
{
public new string GetName()
{
return "xiangshu";
}
} C1 c1 = new C1();
Console.WriteLine(c1.GetName());//输出“祥叔” C2 c2 = new C2();
Console.WriteLine(c2.GetName());//输出“xiangshu” //重点看这里,和上面的重写作比较 C1 c3 = new C2();
Console.WriteLine(c3.GetName());//输出“祥叔” #endregion
总结
1:不管是重写还是覆盖都不会影响父类自身的功能(废话,肯定的嘛,除非代码被改)。
2:当用子类创建父类的时候,如 C1 c3 = new C2(),重写(override)会改变父类的功能,即调用子类的功能;而覆盖(new)不会,仍然调用父类功能。
3:虚方法、实方法都可以被覆盖(new),抽象方法,接口 不可以。
4:抽象方法,接口,标记为virtual的方法可以被重写(override),实方法不可以。
5:重写使用的频率比较高,实现多态;覆盖用的频率比较低,用于对以前无法修改的类进行继承的时候。
C#学习笔记(16)——C#中重写(override)和覆盖(new)的区别的更多相关文章
- Linux学习笔记:ftp中binary二进制与ascii传输模式的区别
在使用ftp传输文件时,常添加上一句: binary -- 使用二进制模式传输文件 遂查资料,如下所获. FTP可用多种格式传输文件,通常由系统决定,大多数Linux/UNIX系统只有两种模式:文本 ...
- Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行
Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候 ...
- SQL反模式学习笔记16 使用随机数排序
目标:随机排序,使用高效的SQL语句查询获取随机数据样本. 反模式:使用RAND()随机函数 SELECT * FROM Employees AS e ORDER BY RAND() Limit 1 ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理
(1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- [学习笔记] 在Eclipse中导入项目
参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.
- [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar中的类解压后放在运行jar中
前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中 使用7z打开压缩包,查看所有依赖的jar都被解压以包名及class的方式存储在了运行jar中,此时jar的 ...
- [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中
本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...
- [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中
工程创建可参考前文: [学习笔记] 在Eclipse中使用Hibernate,并创建第一个工程,数据库为Oracle XE 在工程上鼠标右键: 找到java 选择 Runable JAR file N ...
随机推荐
- 【struts2】struts2的execAndWait拦截器使用
使用execAndWait拦截器可以在等待较长时间的后台处理中增加等待页面.实现如下图所示的效果: 1)struts.xml主要部分 <action name="test" ...
- Elasticsearch与RDS比较
Elasticsearch是一个分布式,实时,全文搜索引擎.所有操作都是通过RESTful接口实现,其底层实现是基于Lucene全文搜索引擎.数据以JSON文档的格式存储索引,不需要预先规定范式. 和 ...
- Easyui 中 Tabsr的常用方法
注:index必须为变量 tab页从0开始 //新增一个tab页var index = 0;$('#tt').tabs('add',{ title: 'Tab'+index, content: '&l ...
- PowerDsigner 16逆向工程导入mysql
由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1. 安装MYSQL的ODBC驱动 Connector/ODBC 5.1.1 ...
- Android RoboGuice开源框架、Butter Knife开源框架浅析
Google Guice on Android(RoboGuice) 今天介绍一下Google的这个开源框架RoboGuice, 它的作用跟之前讲过的Dagger框架差点儿是一样的,仅仅是Dagger ...
- es5 温故而知新 简单继承示例
// 矩形(构造器/父类) function Rectangle (height, width) { this.height = height; this.width = width; } // 获取 ...
- MySQL的DDL语句、DML语句与DCL语句
背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...
- 在 Unity 中基于 Oculus DK1 的开发
开发环境: Windows 10 专业版 64位(GeForce GTX 970M,驱动版本:378.72) 大朋助手 1.3.2.10,大朋E2(http://www.deepoon.com/dap ...
- cocos2d-x 模态对话框的实现
心情不好,恩.不扯淡了.直接讲. ================================== 在泰然看了一篇实现模态对话框的文章,写的还不错,然后在其基础上加了我简单加了一层灰色透明背景,这 ...
- C++的iterator与const_iterator
所有的标准库容器都定义了相应的迭代器类型.迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素. 1.iterator,const_iterator作用:遍历容器内 ...