有没有什么办法在C#中使用扩展方法覆盖类方法?
有些场合我想用扩展方法重写类中的方法。 有没有办法在C#中做到这一点?
例如:
public static class StringExtension { public static int GetHashCode(this string inStr) { return MyHash(inStr); } }
我想这样做的一个例子是能够将一个string的散列存储到数据库中,并且所有使用string类的散列的类(即字典等)都使用相同的值。由于内置.Net哈希algorithm不保证从一个版本的框架兼容到下一个,我想用我自己的replace它。
还有其他的情况,我已经跑到了我想用一个扩展方法重写一个类方法,所以它不只是特定于string类或GetHashCode方法。
我知道我可以通过inheritance现有的类来实现这一点,但是在很多情况下能够使用扩展来实现这一点很方便。
没有; 一个扩展方法永远不会优先于具有合适签名的实例方法,也不会参与多态( GetHashCode
是一个virtual
方法)。
如果方法有不同的签名,那么可以完成 – 所以你的情况:不。
但除此之外,你需要使用inheritance来做你正在寻找的东西。
据我所知,答案是否定的,因为扩展方法不是一个实例。它更像是一个intellisense设施,让我们可以使用一个类的实例调用静态方法。 我认为你的问题的解决scheme可以是一个截取特定方法(例如GetHashCode())的执行的拦截器,并做一些其他的事情。要使用这样一个拦截器(如一个城堡项目提供的),所有的对象应该使用对象工厂(或Castle中的IoC容器),以便通过在运行时生成的dynamic代理拦截他们的接口(Caslte也可以让你拦截类的虚拟成员)