xan*_*ndy 5 c# extension-methods
我有以下模型模式:
public abstract class PARENTCLASS {...}
public class CHILD_A_CLASS : PARENTCLASS{...}
public static class EXTENSION{
public static METHOD(this PARENTCLASS parent){...}
public static METHOD(this CHILD_A_CLASS child) {...}
}
Run Code Online (Sandbox Code Playgroud)
像上面这样的东西,当然会有更多的孩子(和孙子)课程,但我只是把它们中的一个.问题是,当我调用扩展方法时,如下所示:
PARENTCLASS cc = new CHILD_A_CLASS();
cc.METHOD();
Run Code Online (Sandbox Code Playgroud)
它将执行PARENT扩展方法而不是我期望的CHILD扩展方法.有人知道如何实现这个?(我没有考虑将METHOD本身放入类中并让它继承,因为我希望保持模型类的清洁并远离其他逻辑).
当然可以重载扩展方法.您的代码是一个确切如何操作的示例.
您似乎想要的是能够以这样一种方式覆盖扩展方法,即对象的运行时类型将决定扩展方法调用.就像在类上定义虚方法一样.此功能没有特定的语言语法支持.
如果这对您来说非常重要,那么可以手动实现该功能.它需要一点蛮力,但它会完成工作.例如 ...
public static class Extension {
public static void Method(this ParentClass p) {
var c = p as ChildAClass;
if ( c != null ) {
Method(c);
} else {
// Do parentclass action
}
}
public static void Method(this ChildAClass c) {
...
}
}
Run Code Online (Sandbox Code Playgroud)