我搜索了网络和stackoverflow,发现许多有关CS0311错误的帖子。没有一种情况比我更接近。我有一个从通用类继承的通用类。

请注意,BusinessBaseCSLA框架中的类

我想念什么?

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的工作原理。

10-04 16:19