C#中override和overload的区别
重载应该叫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)这个方法就行了。
{
private string myString;
public SampleClass(string str)
{
this.myString = str;
}
public int IndexOf(string s)
{
return IndexOf (s, 0);
}
public int IndexOf(string s, int startIndex)
{
return IndexOf(s, startIndex, myString.Length - startIndex );
}
public virtual int IndexOf(string s, int startIndex, int count)
{
return myString.IndexOf(s, startIndex, count);
}
}
转载于:https://www.cnblogs.com/shenzikun1314/p/6393817.html
C#中override和overload的区别相关推荐
- override和overload的区别
override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类 ...
- vs 不能自动 析构函数_深入理解C++虚函数的override、overload与hide以及虚析构函数...
今天主要讲的是虚函数的override与overload的区别.首先我们来看一段代码: 示例代码 #include <stdio.h> #include <string> #i ...
- Java中重载(overload)和重写(override)
了解了C++中重载(overload)和重写(override)和隐藏,需要注意的是,java中也有重载和重写,有一些区别: 1.重载 java的重载是可以在父类和子类中实现的,而C++中的重载是指在 ...
- Override和Overload的含义去区别
最近看了一下关于java的基础知识,对此作了一下搜集整理: java中的继承,方法覆盖(重写)override与方法的重载overload的区别 方法的重写(Overriding)和重载(Overlo ...
- Override和Overload的含义和区别
Override和Overload的含义和区别. (1). Override 特点 (01).覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果: (02).覆盖的方法的返回值必须 ...
- C++中override overload overwrite
C++中override overload overwrite 1. overload(重载)(不是多态) 重载:是指同一可访问区内被声明的几个具有不同的参数列(参数类型.参数个数.顺序不同)的同名函 ...
- C++中重载与重写函数区别及虚函数(转载)
C++中重载与重写函数区别及虚函数 C++中的虚函数(virtual function) 1.简介 虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的 ...
- Java中重载和复写的区别
Java中重载和复写的区别 重载(overload) 复写(override) 区别和联系 重载(overload) 函数重载的最突出的例子就是类的构造函数,用户定义一个对象时可能会提供多种参数组合: ...
- fileoutputstream路径 android,Android编程中FileOutputStream与openFileOutput()的区别分析
本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...
最新文章
- 计算机缺失wininet.dll,xp系统开机提示wininet.dll文件丢失怎么解决
- Nature:揭示人大脑类器官为何缺乏正常人脑特有的细胞亚型和复杂回路
- CEO换人、IPO延期,比特大陆艰难转型路漫漫
- java的知识点17——java.util.Arrays类、多维数组
- 【学习笔记】JS进阶语法一DOM进阶
- oracle avg分析函数,分析函数之sum,avg
- [css] css中的选择器、属性、属性值区分大小写吗?
- OpenShift 4 之 GitOps(5)用ArgoCD配置其他OpenShift资源
- 数据结构与算法之美-字符串匹配(上)
- centos7安装最新稳定版nginx
- 不收费的数据恢复软件_有救了!快收好这7个数据恢复神器
- 中科院分词系统大致流程
- TSP问题详解(旅行商问题)
- -XX:NewRatio 命令
- VR全景图在家装行业的应用及发展
- ssm基于微信小程序的恋上诗词设计与实现毕业设计源码011431
- 线上线下结合的教育模式将成为主流趋势
- 微信小程序:小程序服务器域名配置合法域名
- cc1310实现wor接收发送低功耗模式
- Code for VeLO 2: Training Versatile Learned Optimizers by Scaling Up