一个方法重写 (override) 的程序集小细节
在写一个 Helper 的基类时,很简单的定义了一个如下的抽象类:
1 | public abstract class BaseHelper |
而具体实现也非常简单,无非就是重写一下而已:
1 | internal class TagsHelper : BaseHelper |
但是并不能编译通过,一直提示 BlockHelper
这个方法 no suitable method found to override。经过反复对比,并不能找到这个重写方法和基方法有什么区别,并且这也是 Resharper 自动生成的,所以函数签名应该是没有问题的。
不过,另一个方法 Helper
却没有任何问题,那么问题估计发生在 HelperOptions
这个类型上面。这个类是另外一个外部依赖中的,而抽象类引用的是 nuget 包,而子类引用的是用源码编译的版本,导致了在引用时发生程序集冲突。
而如何能知道究竟是程序集问题还是重写的方法不对呢?当没有可重写的虚方法时,override
和方法名会一同被标记红波浪线,而程序集错误只会标记方法名。
不过,如果是程序集问题导致的无法重写,为什么不提示是程序集问题呢?却只提示无可重写的方法真的是有点难以捉摸。