学习笔记: new & override 两者的区别
2010-08-06 14:27
239 查看
输出: TempBase.A TempBase.AV TempBase.B TempBase.BV Temp.A Temp.AV Temp.B Temp.BV TempBase.A TempBase.AV TempBase.B Temp.BV override不能重写非虚方法或静态方法 重写的基方法必须是 virtual、abstract 或override 的 override 声明不能更改virtual 方法的可访问性 override 方法和virtual 方法必须具有相同的访问级别修饰符 不能使用修饰符new、static、virtual 或abstract 来修改override 方法 重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称 属性可以使用virtual,override 和abstract 关键字,就像方法一样,但这几个关键字不能用于字段 (为什么 override 也可以重写呢?因为基类中的override 实际上是对基类的基类进行的重写,由于继承可传递,所以也可以对基类中override 的方法进行重写) 隐藏基类方法:new 当从基类继承一个(非抽象的)成员时,也就继承了其执行代码。如果继承的成员是虚拟的,就可以用override 关键字重写这段代码。无论继承的成员是否为虚拟,都可以隐藏这些执行代码。 @@ Override和New 总算懂了大概。 MSDN分析得细致,早点去上面就好了,呃,浪费不少时间。 Override和New的区别,最主要还是体现在面向对象的本质上,多态... ... 重写通常用在以下情况下: 您要定义多态性派生类。 您需要安全地让编译器强制执行相同元素类型和调用序列。 隐藏通常用在以下情况下: 您希望可以修改基类并使用您的名称定义元素。 您希望可以随意更改元素类型或调用序列。 以下 http://msdn.microsoft.com/zh-cn/library/6fawty39(v=VS.80).aspxC# 语言经过专门设计,以便不同库中的基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容。 这具有多方面的意义。例如,这意味着在基类中引入与派生类中的某个成员具有相同名称的新成员在 C# 中是 完全支持的,不会导致意外行为。它还意味着类必须显式声明某方法是要重写一个继承方法,还是一个仅隐藏 具有类似名称的继承方法的新方法。 C# 允许派生类包含与基类方法名称相同的方法。 基类方法必须定义为 virtual。 如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。 如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。 如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不调用基类方法。 可以从派生类中使用 base 关键字调用基类方法。 override、virtual 和 new 关键字还可以用于属性、索引器和事件中。 默认情况下,C# 方法不是虚方法 -- 如果将一种方法声明为虚方法,则继承该方法的任何类都可以实现其自 己的版本。若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用 override 关键字重写基虚方法,或使用 new 关键字隐藏基类中的虚方法。如果 override 关键字和 new 关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法。
......
......
相关文章推荐
- 黄聪:c# override,new关键字区别与使用(学习笔记)
- c# override,new关键字区别与使用(学习笔记)
- 学习笔记--javascript 的<script></script>放在body和<head></head>的区别
- C/C++日常学习总结(第二篇)结构体和类的大小及区别&为什么是new一个对象而不是malloc
- 极客班 c++(下)第一周学习笔记 ——new & delete
- C#.NET学习笔记---C#中方法覆盖时override和new的比较,abstract和virtual的比较(含C#多态的实现)
- <C++学习笔记>引用中的&和&&区别
- C#学习笔记:new与override
- 黑马程序员之SQL Server学习笔记:MS SQL Server中char&nchar、varchar&nvarchar、char&character区别
- 学习笔记之——new 和malloc 的区别
- java堆 、栈学习(深刻理解String s=new String("xoxo")和String s=" xxoo"的区别)
- android 开发零起步学习笔记(二十三): Android 对话框AlertDialog和AlertDialog.Builder两者的区别
- 【Objective_C学习笔记】alloc-init 与new的区别
- 关于继承构造函数执行顺序、override及new如何执行的学习笔记
- Spring学习笔记(十):@Autowired和new的区别
- 找工作学习笔记1------=和==、&和&&、|和||的区别
- Java学习笔记-&&与&、||与|的区别
- C++学习的一些笔记-->1:C++ iostream和iostream.h的区别
- 【KK学习笔记】c# 虚方法 virtual 、 重写方法 override 、new 的使用与理解
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)