我搜索了网络和stackoverflow,发现许多有关CS0311错误的帖子。没有一种情况比我更接近。我有一个从通用类继承的通用类。
请注意,BusinessBase
是CSLA
框架中的类
我想念什么?
public interface Itest
{
int Digit();
}
class BB : Itest
{
public int Digit()
{
return 20;
}
}
class Test<T> : BusinessBase<T>, Itest where T : Test<T>, Itest
{
public int Digit()
{
return 30;
}
}
Test<Itest> test = new Test<Itest>(); //error CS0311
错误CS0311类型
'MyTestApp.Itest'
不能用作通用类型或方法'T'
中的类型参数'A<T>'
。没有从'MyTestApp.Itest'
到'MyTestApp.A<MyTestApp.Itest>'
的隐式引用转换。 MyTestApp 最佳答案
您可以执行以下操作:
interface Itest {}
class BusinessBase<T> {
}
class Test<T> : BusinessBase<T>, Itest where T : Test<T>, Itest {
public int Digit() {
return 30;
}
}
class IT : Test<IT>, Itest {
}
class Program {
public static int Main() {
var t = new Test<IT>();
t.Digit();
return 0;
}
}
对我来说,泛型的使用非常糟糕,但这就是CSLA的工作原理。