运行FxCop时,我得到的错误是接口方法应该可以通过子类型调用。
该决议声明如下:
“让'MenuPreview'密封(如果此课程先前已发货,则会发生重大变化), 非显式地实现该方法,或实现一个公开的新方法 'IComponentConnector.Connect(int,object)'的功能 并且对派生类可见。“
我从Window或其他一些UI类派生的所有类都得到了这个。这是一个我可以忽略的红鲱鱼,还是我应该做的事情?
答案 0 :(得分:0)
我认为问题是如果接口是显式实现的,派生类就不可能改变接口行为并利用基类行为。在需要显式接口实现的情况下,解决这一困难的一种常见模式是让接口除了调用受保护的虚方法之外什么都不做,并且让任何希望覆盖接口行为的派生类通过以下方式实现:受保护的虚拟方法。
考虑IDisposable.Dispose()。如果显式实现中的代码实际上负责执行处理,那么除非重新实现IDisposable,否则派生类将无法添加其自己的dispose逻辑,并且重新实现IDisposable的类将无法访问其parent的Dispose方法。虽然Microsoft可能有IDisposable.Dispose调用具有不同名称的受保护函数,但它选择使用相同的名称但添加类型为Boolean的虚拟参数。