C#泛型类型参数是泛型类型

时间:2017-09-20 09:49:18

标签: c# generics

应该使用什么类型的约束(如果有的话)来完成这项工作:

abstract class BaseClass<T> where T : ...
{
    T<int> A { get; set; }
    T<int?> B { get; set; }
    T<string> C { get; set; }
}

目前它给出&#34;错误CS0307类型参数&#39; T&#39;不能与类型参数一起使用&#34;。

1 个答案:

答案 0 :(得分:0)

有限制的解决方案:Class1<T>的所有代表:Class2<T>T<>应该从一个类或接口(IBase<T>)继承:

public interface IBase<T>
{
    T Value { get; set; }
}

public class Class1<T> : IBase<T>
{
    public T Value { get; set; }
    public void SomeMethod1(T input)
    {
    }
}

public class Class2<T> : IBase<T>
{
    public T Value { get; set; }
    public void SomeMethod2(T input)
    {
    }
}

public class BaseClass<T1, T2, T3> 
    where T1 : IBase<int> 
    where T2 : IBase<int?> 
    where T3 : IBase<string>
{
    public T1 A { get; set; }
    public T2 B { get; set; }
    public T3 C { get; set; }        

    public void SomeMethod3()
    {
        A.Value = 3;
        B.Value = null;
        C.Value = "string";
    }
}

<强>用法:

var test1 = new BaseClass<Class1<int>, Class1<int?>, Class1<string>>();
test1.A.Value = 3;
test1.A.SomeMethod1(3);

var test2 = new BaseClass<Class2<int>, Class2<int?>, Class2<string>>();
test2.C.Value = "string";
test2.A.SomeMethod2(3);