我在程序集A中公开了以下类:
public abstract class ServiceDependencyHost
{
protected virtual T ReferenceService<T>() where T : ServiceBase
{
// Virtual implementation here...
}
}
我将这个派生类放在一个单独的程序集(B)中:
public sealed class ProcessServiceOperation : ServiceDependencyHost
{
public override T ReferenceService<T>()
{
// Override implementation here...
return base.ReferenceService<T>();
}
}
使用如上所示的代码,编译器在这行代码上发生错误:
return base.ReferenceService<T>();
类型“T”无法作为泛型类型或方法A.ReferenceService()中的类型参数“T”使用。从“T”到“System.ServiceProcess.ServiceBase”没有装箱转换或类型参数转换。
自然地,我试图在程序集B中复制这些约束:
public override T ReferenceService<T>() where T : ServiceBase
然而编译器现在警告上面一行...
覆盖和显式接口实现方法的约束从基础方法继承,因此不能直接指定。
这篇答案指出我的解决方案应该可以工作。我想避免使用反射来公开这个方法。它应该是如此简单!
提前感谢任何人能发现我犯了什么错误。