Luc*_*cas 12 c# virtual extension-methods
我有一个在客户端应用程序和服务器应用程序中使用的类.在服务器应用程序中,我通过扩展方法向类添加了一些功能.效果很好.现在我想要更多:
我的班级(B)继承自另一个班级(A).
我想将一个虚函数附加到A(比如说Execute()),然后在B中实现该函数.但只在服务器中实现.Execute()方法需要使用只有服务器知道的类型才能完成只能在服务器上执行的操作.
有很多类型的继承自A,就像B一样,我想为它们中的每一个实现Execute().
我希望我可以为A添加一个虚拟扩展方法,但这个想法似乎没有飞过.无论有没有扩展方法,我都在寻找解决这个问题的最优雅的方法.
不,不存在虚拟扩展方法之类的东西。您可以使用重载,但这不支持多态性。听起来您可能想看看依赖注入(等)之类的东西,以便在不同的环境中添加不同的代码(依赖项) - 并在常规虚拟方法中使用它:
class B {
public B(ISomeUtility util) {
// store util
}
public override void Execute() {
if(util != null) util.Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用 DI 框架在运行时提供特定于服务器的ISomeUtility实现B。static您可以使用中央注册表(IOC,但没有 DI)执行相同的操作:
override void Execute() {
ISomeUtility util = Registry.Get<ISomeUtility>();
if(util != null) util.Foo();
}
Run Code Online (Sandbox Code Playgroud)
(您需要编写Registry等;加上在服务器上,注册ISomeUtility实现)