c#里面virtual 有什么用...不是很了解

据说是使用了虚方法,子类可以覆盖,如果不使用virtual的时候,子类要覆盖这个父类方法的时候,需要new关键字?但是我在vs2012上面测试了,不使用new也可以运行吗... 据说是 使用了虚方法,子类可以覆盖,如果不使用virtual 的时候,子类要覆盖这个父类方法的时候,需要new关键字?
但是我在vs2012上面测试了,不使用new也可以运行吗
public class Class5
{
public string BaseAction()
{
return "Class5--基类";
}
}

public class Class6:Class5
{
public string BaseAction()
{
//return base.BaseAction();
return "Class6--子类";
}
}
我这样照样能运行,调用的是class6里面的BaseAction,不写new关键字编译器只是提示一下而已,不报错..

还有
public virtual string BaseAction() 跟 public newstring BaseAction()是不是一个回事?
public new string BaseAction()中间打漏一个空格
展开
 我来答
lhyAiralhy
推荐于2017-10-12 · TA获得超过469个赞
知道小有建树答主
回答量:327
采纳率:0%
帮助的人:259万
展开全部
首先你如果不用virtual重写的话,系统默认会为你加new关键字,他的作用是覆盖,而virtual的关键作用在于实现多态,理解一下多态你就会明白为什么这么用了,对于日后软件版本的升级,实现版本兼容性,甚至于扩展都非常重要
追问
能具体说说virtual如何扩展吗..

比如你定义了一个抽象基类base,里面有抽象方法A...那我写了个class1继承base,实现它的A方法...
那我如果系统更新了...就比如说A方法需要重新写过..那这个时候怎么办...这是不是还得找到A这个方法修改...这个我还不如直接定义一个A函数,不搞这些多态...反正都是要修改...
追答
额。。之所以有这方面的疑问可能是项目经验导致的,日后接触多了你自然就明白了,比如,你要去一个目的地,走路会很慢,坐车会快就到了,虽然两种方式都能到,但明显坐车更优势。
在来说多态
假如你在做一个项目
当前业务是对捷达车做处理
你做了一个捷达车类,当然你也会对这个类做很多的处理,把他用作对象参数,返回值等等
但是日后业务扩展了,有了宝马,奔驰,大众等等
如果你也按之前的处理,你要做宝马类,奔驰类,大众类等等,而你之前的参数,返回值的地方等等都要重新改重新加,如果利用多态
你当时做一个汽车类,那么以后返回值,参数的地方都用汽车类类型,这样就会大大降低工作量。如果放到更大的项目这将是巨大的工作量,而且很容易出bug。
我可能描述的也不是很清楚,希望你能理解。
xuchao41771983
2014-12-25 · TA获得超过157个赞
知道小有建树答主
回答量:370
采纳率:100%
帮助的人:118万
展开全部
virtual就是虚的意思,可以修饰属性、方法,虚的成员可以被子类重写,以实现不同的特性。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
徐守威
2014-12-25 · TA获得超过104个赞
知道小有建树答主
回答量:274
采纳率:100%
帮助的人:85.4万
展开全部
虚方法,相当于java中的方法的覆盖
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式