搞不明白的几个关键字!
《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();创建类的实例并将对对象的引用交给"="左边的变量、名称