我写了一个非常简单的类,它采用了一个通用参数,比如T
。现在,我想强制T
只能是我的自定义类型之一ClassA
,ClassB
和ClassC
,这样我就不会错误地将它用于像{一样无意义的类型{1}},int
甚至我写的其他类。我认为这样做的一种方法是让这三个类实现相同的空long
接口并在泛型类定义中使用ISomething
。但是,我不知道这种方法(实现空接口)是否有意义。有没有更好的方法呢?
答案 0 :(得分:2)
这不起作用。由于T
的类型为ISomething
,因此您只能访问通用类中ISomething
的成员。由于ISomething
只是一个没有任何成员的标记界面,所以对你没用
如果您的类共享通用功能,请将此共享功能放入接口。如果他们不这样做,他们不应该实现相同的界面,你应该问自己你的设计是否正确
请举一个更具体的例子,也许我们可以提供更实用的提示。
答案 1 :(得分:1)
这取决于你想要添加什么样的约束以及你的班级做什么样的操作。
通常,您应该为泛型类使用的类型添加约束
在下面的示例中,泛型类使用在基类中实现的方法GetString()。您需要在该类型上添加约束以确保泛型类将找到该方法
class A
{
public string GetString()
{
return "A";
}
}
class B : A
{
public string GetAnotherString()
{
return "B";
}
}
class GenericClass<T> where T:A
{
private T _obj;
public GenericClass(T obj)
{
_obj = obj;
}
public string GetString()
{
return _obj.GetString();
}
}
public class MyClass
{
public static void Main()
{
GenericClass<A> genericClass=new GenericClass<A>(new B());
Console.WriteLine(genericClass.GetString());
Console.Read();
}
}