应该使用什么类型的约束(如果有的话)来完成这项工作:
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;。
答案 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);