【发布时间】:2011-12-14 11:05:17
【问题描述】:
我有一个名为BaseView 的普通类,它带有一个虚拟方法DisplayView。此方法调用GetHeader 和GetBody 虚拟方法来获取页面的内容。然后,我将创建一个继承自BaseView 的类,并覆盖需要以不同于基类的方式显示内容的方法。
我的问题是,虽然这很好用,但在运行代码分析时,我被警告不要直接调用虚函数。
我是否应该在基类之上创建另一个类层来覆盖虚函数并仅从其继承?
直接使用虚方法有什么缺点?
编辑:警告是:
CA2214 : Microsoft.Usage : xxx 包含一个调用链,导致 调用类定义的虚方法。查看以下内容 意外后果的调用堆栈
【问题讨论】:
-
请显示准确的警告信息
-
在派生类方法实现中添加 new/override 关键字,这个警告可能会消失。
-
如果你从构造函数调用你的虚拟方法,检查这个问题:stackoverflow.com/questions/448258/…
-
@Maheep 使用new关键字不会覆盖基类方法,只是简单的隐藏基类实现
-
代码分析消息号是多少(应该叫CA2214之类的)?
标签: c# inheritance