【发布时间】:2014-01-12 14:49:23
【问题描述】:
我在程序集 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
但编译器现在会在上面的行发出警告...
覆盖和显式接口实现方法的约束是从基方法继承的,所以不能直接指定。
This answer 表示我的解决方案应该有效。我想避免使用反射来公开这种方法。应该就是这么简单!
提前感谢任何能发现我所犯错误的人。
【问题讨论】:
标签: c# .net generics inheritance