gpt4 book ai didi

c# - 有没有办法在 C# 中重载扩展方法?

转载 作者:太空狗 更新时间:2023-10-29 23:11:55 26 4
gpt4 key购买 nike

我有以下模型模式:

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) {...}
}

类似上面的东西,当然会有更多的子(和孙)类,但我只放了其中一个。问题是,当我像下面这样调用扩展方法时:

PARENTCLASS cc = new CHILD_A_CLASS();
cc.METHOD();

它将执行 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) {
...
}
}

关于c# - 有没有办法在 C# 中重载扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/902972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com