您的位置:首页 > 其它

学习笔记: 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).aspx 
C# 语言经过专门设计,以便不同库中的基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容。

这具有多方面的意义。例如,这意味着在基中引入与派生类中的某个成员具有相同名称的新成员在 C# 中是

完全支持的,不会导致意外行为。它还意味着类必须显式声明某方法是要重写一个继承方法,还是一个仅隐藏

具有类似名称的继承方法的新方法。

C# 允许派生类包含与基类方法名称相同的方法。

基类方法必须定义为 virtual。

如果派生类中的方法前面没有 newoverride 关键字,则编译器将发出警告,该方法将有如存在

   new 关键字一样执行操作。

如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。

如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不调用基类方法。

可以从派生类中使用 base 关键字调用基类方法。

overridevirtualnew 关键字还可以用于属性、索引器和事件中。

默认情况下,C# 方法不是虚方法 -- 如果将一种方法声明为虚方法,则继承该方法的任何类都可以实现其自

己的版本。若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用

override 关键字重写基虚方法,或使用 new 关键字隐藏基类中的虚方法。如果 override 关键字和 new

关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法。

......

......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐