C#中override和overload的区别_override和overload的区别是什么? c#-程序员宅基地

技术标签: C#  

转载地址:http://www.cnblogs.com/netlyf/archive/2009/09/08/1562642.html

重载应该叫overload,重写叫override;重载某个方法是在同一个类中发生的!重写是在子类中重写父类中的方法。

1.override:   父类:public virtual string ToString(){return "a";}
                   子类:public override string ToString(){return "b";}
2.overload:  同一类中或父子关系类中皆可.
                   public string ToString(){return "a";}
                   public string ToString(int id){return id.ToString();}
重写(override)是用于重写基类的虚方法,这样在派生类中提供一个新的方法;

重载(overload)是提供了一种机制, 相同函数名通过不同的返回值类型以及参数来表来区分的机制
===================================================== 

很本质的区别就是看函数特征:覆写(Override)的两个函数的函数特征相同,重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。
函数特征包括函数名、参数的类型和个数。
Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
比如:Derived继承了Base,Base里面有void A(int a) ,那么如果你Derived里面觉得A写得不好或不适合这个类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖掉了。
overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个。
=====================================================
1. 重写(override)
------------------
使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或 override 方法。

2. 重载(overload)
------------------
当类包含两个名称相同但签名不同的方法时发生方法重载。

使用重载方法的指南:
a. 用方法重载来提供在语义上完成相同功能的不同方法。
b. 使用方法重载而不是允许默认参数。默认参数的版本控制性能不好,因此公共语言规范(CLS)中不允许使用默认参数。
c. 正确使用默认值。在一个重载方法系列中,复杂方法应当使用参数名来指示从简单方法中假定的默认状态发生的更改。
d. 对方法参数使用一致的排序和命名模式。提供一组重载方法,这组重载方法带有递增数目的参数,以使开发人员可以指定想要的级别的信息,这种情况很常见。您指定的参数越多,开发人员就可指定得越详细。
e. 如果必须提供重写方法的能力,请仅使最完整的重载是虚拟的并根据它来定义其他操作。

下面这个例子代码具体解释一下这种模式,只有最后一个方法(参数最完整的方法)是虚方法,在继承了这个类的子类中只要重写(override)这个方法就行了。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mao_mao37/article/details/51656223

智能推荐

特征描述子的理解(pfh,fpfh,short)_fpfh特征知乎-程序员宅基地

文章浏览阅读2.9k次。为什么要特征描述子?因为用点特征描述的(法线、曲率等)只能是用少部分的参数来代表一段几何区域,描述参数太少。所以通过参数化 查询点和领域点的空间差异 形成了特征描述子。PFH:该方法是使用 一对点 通过局部坐标系来建立对应的关系的(因为是一对点,所以具有一定的抗干扰性,比如抗旋转),但是对法线计算的准确性的依赖比较大。将(x,x,x)看作空间的点 ,最后做投票选择,最后在展开。(pcl 源码将f1,f2,f3归一化后放入直方图,好像还用到了哈希表存储。)这里注意的是它..._fpfh特征知乎

在vue项目中使用moment.js(时间格式化)_vue 使用moment时间格式化-程序员宅基地

文章浏览阅读589次。在vue项目中使用moment.js_vue 使用moment时间格式化

通过NFS挂载根文件系统_info: task swapper/0:1 blocked for more than 10 se-程序员宅基地

文章浏览阅读1.4k次。实验八通过NFS挂载根文件系统【实验目的】 掌握bootcmd、bootargs环境变量的设置和NFS挂载根文件系统的方法。 说明:在实验中命令行提示符为“$”表示在主机上运行,“#”表示在目标板上运行。【实验环境】1. Ubuntu 12.04 32位发行版2. FS6818平台【实验步骤】1. 将“案例源码\第一天\镜像文件\rootfs.tar.xz”拷贝至Ubu..._info: task swapper/0:1 blocked for more than 10 seconds.

java.net.sockttimeout,springboot+thrift超时 java.net.SocketTimeoutException: Read timed out-程序员宅基地

文章浏览阅读890次。报错信息如下:org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed outat org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)at org.apache...._springboot resttemplate java.net.sockettimeoutexception: read timed out

static_cast和reinterpret_cast_static_cast rep-程序员宅基地

文章浏览阅读500次。[cpp] view plaincopy static_cast和reinterpret_cast揭秘 收藏 本文讨论static_castreinterpret_cast reinterpret_cast可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最_static_cast rep

Hadoop之JDK配置_hadoop 2.7 使用jdk版本-程序员宅基地

文章浏览阅读1.5k次。Hadoop之JDK配置步骤总结:(1)下载,我的是jdk-8u181-linux-x64.tar.gz(2)放到某目录下(移动到某目录下命令:mv 某文件名 目录名),然后解压(tar -zxvf +压缩包名称)(3)环境变量配置,一般在 /etc/profile 或 ~/.bashrc文件下(4)使环境变量生效 source /etc/profile或 source ~/.bas..._hadoop 2.7 使用jdk版本

随便推点

docker-compose安装mysql脚本样例_docker-compose执行mysql脚本-程序员宅基地

文章浏览阅读311次。#环境需求1)安装docker必须是64位机器2)安装docker时liunx的内核版本必须是3.10或更高版本3)docker的版本默认是19.03.94)mysql的版本默认是5.75)docker-compose的版本默认是1.27.4#结构#-----------------------|mysql#-----------------------------|conf (数据库my.cnf配置)#-----------------------------|data#-------_docker-compose执行mysql脚本

python一帧一帧读取视频_python tools实现视频的每一帧提取并保存-程序员宅基地

文章浏览阅读263次。Preface最近在做 video caption 相关,要处理大量视频。Method 1方法 1 是最简单的,用 FFmpeg工具来完成。具体的网上有很多这方面的资料,本人只是简单了解了一下如何使用。如下图,有一个名为 ffmpeg_test.avi的视频:在当前目录打开终端,输入如下命令:$ffmpeg -i ffmpeg_test.avi frames_%03d.jpg -hide_bann..._cap.read() 每隔一秒获取一帧

java 用户拒绝对代码授予权限,java.lang.SecurityException:权限拒绝:打开提供程序...-程序员宅基地

文章浏览阅读1.1k次。I start image picker intent using:final Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);startAct..._java.lang.securityexception: not allowed to access cell info

setTimeout循环:js异步机制问题_js 循环settimeout异步执行-程序员宅基地

文章浏览阅读295次。最近写前端时发现setTimeout和for循环相遇时,会发生一些特殊的情况,与预期的执行结果不符。for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 );}上述代码的执行结果为:6,6,6,6,6这似乎与预期的1,2,3,4,5结果不符。理想的执行步骤:但是实际的执行步骤:经过查阅资料,js存在同步和异步的执行机制,同步事件的优_js 循环settimeout异步执行

基于GDAL的遥感影像显示(C#版)_c#调用遥感图像处理库-程序员宅基地

文章浏览阅读1.8w次,点赞12次,收藏54次。接触GDAL有四五年多时间了,平时都是在C++下使用,最近需要在C#下调用GDAL,所以就开始学习了下,相比C++调用,C#下使用GDAL做图像处理的效率有点低,但是其简单易学,适合菜鸟上手,现把自己刚学到的心得跟大伙分享下,以遥感影像的显示为例。1、 程序环境搭建 首先,需要编译GDAL库的源代码。 GDAL是一个非常强悍的遥感数据格式解析库,支持多种_c#调用遥感图像处理库

html div 水平垂直居中显示,利用CSS实现div水平垂直居中-程序员宅基地

文章浏览阅读55次。实现居中的方案有很多,这里介绍下纯CSS使用absolute配合margin的方案。1. p宽高固定width: 400px;height: 200px;position: absolute;top: 50%;left: 50%;margin-top: -100px;margin-left: -200px;margin-top为-(height / 2),margin-left为-(width /..._"居中"