在这种情况下定义一个通用的 class

Define a generic class in this case

我在 C# 4.0 中使用泛型。这是我的代码:

public class Class1
{
}

public class SubClass1 : Class1
{
}

public class Class2
{
}

public class SubClass2 : Class2
{
}

public class GenericClass1<T1, T2>
    where T1 : Class1
    where T2 : Class2
{
}

public class MyClass1 : GenericClass1<SubClass1, SubClass2>
{
}

// error here
public class GenericClass2<GenericClass1<T1, T2>>
    where T1 : Class1
    where T2 : Class2
{
}

public class MyClass2 : GenericClass2<MyClass1>
{
}

我在编译 GenericClass2 时出错 "Type parameter declaration must be an identifier not a type"。任何人都可以帮助我拯救或找到这种通用案例的解决方案。谢谢

试试这个:

public class GenericClass2<TGeneric, T1, T2>
where TGeneric: GenericClass1<T1, T2>
where T1 : Class1
where T2 : Class2
{
}

遗憾的是,您不能在 class 定义中使用嵌套声明,如下所示:GenericClass2<GenericClass1<T1, T2>>。您可以改用这样的代码:

public class GenericClass1<T1, T2>
    where T1: Class1
    where T2: Class2
{
}

public class MyClass1 : GenericClass1<SubClass1, SubClass2>
{
}

public class GenericClass2<T1, T2, T3>
    where T1: Class1
    where T2: Class2
where T3:GenericClass1<T1, T2>
{
}

public class MyClass2 : GenericClass2<SubClass1, SubClass2, MyClass1>
{
}

您也可以像下面这样使用-

public class Class1
    {
    }

    public class SubClass1 : Class1
    {
    }

    public class Class2
    {
    }

    public class SubClass2 : Class2
    {
    }

    public class GenericClass1<T1, T2>
        where T1 : Class1
        where T2 : Class2
    {
    }

    public class MyClass1 : GenericClass1<SubClass1, SubClass2>
    {
    }


    public class GenericClass2<U>
        where U : GenericClass1<SubClass1, SubClass2>
    {
    }

    public class MyClass2 : GenericClass2<MyClass1>
    {
    }