我写了一个非常简单的类,采用通用参数,比如T
。现在,我要强制执行T
只能是我的自定义类型ClassA
,ClassB
和ClassC
之一,所以,我不能误用毫无意义的类型使用它像int
,long
甚至其他类我写的。我认为这样做的方法是让这三个类在泛型类定义中实现相同的空ISomething
接口并使用where T : ISomething
。但是,我不知道这种方法(实现一个空接口)是否有意义。有没有更好的方法来做到这一点?如何最好地实施泛型约束条件?
2
A
回答
2
这是行不通的。由于T
类型为ISomething
,因此您只能访问泛型类中的ISomething
成员。由于ISomething
只是一个没有任何成员的标记接口,所以它对你没有用处。
如果您的类共享通用功能,请将此共享功能添加到界面中。如果他们不这样做,他们不应该实现相同的界面,你应该问自己你的设计是否正确。
请举一个更具体的例子,也许我们可以给出更多实用的提示。
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();
}
}
相关问题
- 1. 如何有条件地调用带约束的泛型方法?
- 2. 如何对Prolog事实施加约束?
- 3. 如何在Swift中将类型(符合约束条件)类型化为泛型?
- 4. 如何约束多个泛型?
- 5. C#中方法中泛型类型的约束条件#
- 6. 强制泛型实现了TypeScript中的属性(约束泛型)
- 7. 泛型约束与传承
- 8. C#泛型和约束
- 9. 如何将具有泛型参数的类型用作约束条件?
- 10. 如何正确实施最终条件?
- 11. 多约束泛型函数调用如何实际工作?
- 12. 带有“条件”约束的C#泛型类?
- 13. 非泛型声明不允许使用约束条件C++
- 14. 为什么实现具有类型约束的泛型接口的泛型类需要重复这些约束?
- 15. 禁忌搜索:如何实施“员工成对工作”约束条件
- 16. 类型约束中的泛型
- 17. 接口的泛型类型约束?
- 18. 泛型和类型约束的规则
- 19. 类型约束的Swift泛型数组
- 20. C#泛型 - 约束的类型参数
- 21. 反映了泛型类型约束
- 22. Delphi:泛型和类型约束
- 23. 类型参数约束 - 没有泛型(或最近的报价!)
- 24. 在GAE中实施唯一约束
- 25. 实施的UML一般化约束
- 26. 强制实施企业约束
- 27. 如何定义实现接口并约束类型参数的泛型类?
- 28. 如何指定.NET泛型约束中不允许的类型?
- 29. 如何约束一般方法的嵌套泛型类型
- 30. 如何定义约束多个不同的泛型类型
为什么要强制执行,只有你的类型可以,如果泛型类不能与类型做任何使用?听起来更像是你想在使用泛型类的类中强制使用类型。 – jgauffin
这些课程不分享某些元素的曝光吗?如果不是,它与泛型类有什么关系?有什么区别它们的?目前你的方法听起来很不理想,但没有足够的信息为你提供关于你应该做什么的细节。 –
有什么关于'ClassA'等,使它们在这个泛型类中使用有意义? – AakashM