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)这个方法就行了。

时间: 2024-07-29 09:53:23

c#中 override 和overload 的区别的相关文章

C#中override和overload的区别

重载应该叫overload,重写叫override:重载某个方法是在同一个类中发生的!重写是在子类中重写父类中的方法. 1.override:   父类:public virtual string ToString(){return "a";}                   子类:public override string ToString(){return "b";}2.overload:  同一类中或父子关系类中皆可.                  

java中Override 和 Overload的区别

override(重写)  1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载) 1.参数类型.个数.顺序至少有一个不相同. 2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中.

[C#] override和overload的区别

重载应该叫overload,重写叫override:重载某个方法是在同一个类中发生的!重写是在子类中重写父类中的方法. 1.override:   父类:public virtual string ToString(){return "a";}                   子类:public override string ToString(){return "b";}2.overload:  同一类中或父子关系类中皆可.                  

Java 中 override 和 overload 的去别人

问题出现: 即使对于一个经验丰富的开发人员来说,方法重载和方法覆盖的区别都能让他犹豫一下, 对于新手来说,经常容易弄混淆. 有没有比较深入浅出的理解方式,能让人过目不忘,用起来还能有条件反射般的速度呢? 其他人是怎么做的: 写类似比较的博客非常之多,无非也就是分开介绍,然后比较区别. 好像也有效果,前提是要理解,完了还要不时拿来复习,保持记忆不被遗忘. 可以这样理解: override 更准确的翻译应该是推翻,重写. overload 更准确的翻译应该是过载. 如果你不是新手,看到这个解释的时候

override和overload的区别

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

override与overload的区别

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

override 和 overload的区别(较全面)

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. 特点: 覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果: 覆盖的方法的返回值必须和被覆盖的方法的返回一致: 覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类: 被覆盖的方法不能为private,否则在其子类中

c#中override和new的区别

class Program { static void Main(string[] args) { ParentClass test = new SubClass(); test.doSomething(); /*结果: ParentClass SubClass doSomething in ParentClass */ } } class ParentClass { public ParentClass() { Console.WriteLine("ParentClass"); }

delphi override、overload、reintroduce的区别-0613.txt

http://blog.csdn.net/honglixx/article/details/3624934 1.override overload reintroduce的中文叫法是什么? override:覆盖:overload:重载:Reintroduce:重定义 2.在子类中override或overload父类中的动态或虚拟方法后是否会改变父类中的相应方法? 不会 3.self是怎么回事,怎么使用? Self因为这这个对象本身,例如,在TForm1的OnCreate事件中写Self指的是