日期:2014-05-18  浏览次数:20781 次

搞不明白的几个关键字!

《1》两个虚假的东西 virtual 与 abstract(一般选用 virtual ,没有用上abstract)

《2》两个重写的区别 override 与 new (我应该用那一个,我只会从中随便选一个来用,一般选 override )

不知大家 能不能举例说说 自已是如何用 这两组东东的?

------解决方案--------------------
new的效果是,同一个对象,以不同面貌(作为不同类型)出现的时候,调用的方法不是同一个。。。
abstract修饰专门被继承的基类,比如ReadOnlyCollectionBase
abstract方法。。。貌似都直接扔去接口里了
------解决方案--------------------
回答:

1.virtual是虚方法,方法里可以有实现,也可以没有实现。abstract是抽象方法。没有方法体,没有实现。其实这要分具体情况判断。如果写一个方法,方法体没有啥实现的话,那么就选用抽象方法。举个例子:交通工具:都有跑的方法,那么定义一个交通工具跑的方法,那么此方法是虚方法还是抽象方法呢? 我们来分析一下,很明显:交通工具----有汽车、轿车、卡车。等等。。。都有跑的方法,汽车是频率较快的跑,卡车是频率慢慢的跑,轿车是频率很快的跑。很明显。都有各自跑的方法,所以,我们干脆 交通工具里面的 跑的方法 什么都不做。因为没有啥实际意义。所以定义为抽象方法。 

2.说通俗点吧:new是实例化一个新的,override是重新写方法,反正就是New是拿写好的东西来用,override是看写好的东西不爽,拿过来改一下再用。

override是重载所继承的类型方法的 而被继承的类方法必须加virtual 才可以被重载
new 运算符 

1.用于创建对象和调用构造函数 

例:Class_Test MyClass = new Class_Test(); 

2.也用于为值类型调用默认的构造函数 

例:int myInt = new int(); 

myInt 初始化为 0,它是 int 类型的默认值。该语句的效果等同于:int myInt = 0; 

3.不能重载 new 运算符。 

4.如果 new 运算符分配内存失败,则它将引发 OutOfMemoryException 异常。 

new 修饰符 

使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。 

------解决方案--------------------
《1》两个虚假的东西 virtual 与 abstract(一般选用 virtual ,没有用上abstract)

子类必须实现abstract方法,而可以选择性实现virtual方法

《2》两个重写的区别 override 与 new

如果父类存在同名方法,同名方法是abstract的话,那么就是override,如果没有修饰符则使用new重写。
------解决方案--------------------
探讨

《1》两个虚假的东西 virtual 与 abstract(一般选用 virtual ,没有用上abstract)

子类必须实现abstract方法,而可以选择性实现virtual方法

《2》两个重写的区别 override 与 new

如果父类存在同名方法,同名方法是abstract的话,那么就是override,如果没有修饰符则使用new重写。

------解决方案--------------------
探讨
引用:

《1》两个虚假的东西 virtual 与 abstract(一般选用 virtual ,没有用上abstract)

子类必须实现abstract方法,而可以选择性实现virtual方法

《2》两个重写的区别 override 与 new

如果父类存在同名方法,同名方法是abstract的话,那么就是override,如果没有修饰符则……

------解决方案--------------------
我也搞不清,学习了
------解决方案--------------------
探讨

《1》两个虚假的东西 virtual 与 abstract(一般选用 virtual ,没有用上abstract)

子类必须实现abstract方法,而可以选择性实现virtual方法

《2》两个重写的区别 override 与 new

如果父类存在同名方法,同名方法是abstract的话,那么就是override,如果没有修饰符则使用new重写。

------解决方案--------------------
探讨

回答:

1.virtual是虚方法,方法里可以有实现,也可以没有实现。abstract是抽象方法。没有方法体,没有实现。其实这要分具体情况判断。如果写一个方法,方法体没有啥实现的话,那么就选用抽象方法。举个例子:交通工具:都有跑的方法,那么定义一个交通工具跑的方法,那么此方法是虚方法还是抽象方法呢? 我们来分析一下,很明显:交通工具----有汽车、轿车、卡车。等等。。。都有跑的方法,汽车是……

------解决方案--------------------
因为不是一样的东西,当然不能合二为一
------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/sf985hc5.aspx
http://msdn.microsoft.com/zh-cn/library/9fkccyh4.aspx
http://msdn.microsoft.com/zh-cn/library/ebca9ah3.aspx
------解决方案--------------------
简单明子点:
virtual 在实际项目按需求多用于实现多态
abstract 用于做基类

override 是对继承的class or 抽象类实现对virtual abstract方法的重写 实现其逻辑 
,对实现的interface的方法重写并实现其逻辑
new 二个用法:
Class objectName=new Instance();创建类的实例并将对对象的引用交给"="左边的变量、名称