在这种情况下定义泛型类

时间:2015-02-16 07:11:33

标签: c# .net generics

我在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&#34时出错;类型参数声明必须是标识符而不是类型&#34;。任何人帮我救援或找到这种通用案例的解决方案。感谢。

3 个答案:

答案 0 :(得分:2)

不幸的是,你不能在类定义中使用嵌套声明: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>
{
}

答案 1 :(得分:2)

你也可以使用如下 -

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>
    {
    }

答案 2 :(得分:1)

试试这个:

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