这有什么用,在哪里用,它有用吗? C#类类型?

时间:2015-10-11 14:36:42

标签: c# class unity3d types

所以,我正在使用' Grid'基于制作网格的2d游戏的统一引擎资产,

从它的脚本中,有这样的类名,

public class SimpleGridEditor<TGridBuilder, TPoint> : GLEditor<TGridBuilder>
    where TGridBuilder : MonoBehaviour, ITileGrid<TPoint>
    where TPoint : IGridPoint<TPoint>  
{

所以我很好奇SimpleGridEditor&lt; {TGridBuilder,TPoint&gt;一部分。

这是什么?,为什么使用,何时,何时应该使用?

我可以理解像

这样的参数类型

void SomeFunc(int a,string b){}

但是什么是班级类型?

感谢。

1 个答案:

答案 0 :(得分:2)

这些被称为Generic Classes

通用类允许您对数据执行相同的操作,无论其类型如何。

一个典型的例子是List<T>

无论您是否有整数列表new List<int>()或字符串列表new List<string>(),您仍然可以.Add()一个项目,列表,.Remove()项目列表的基础类型从列表到列表实例无关紧要。这为您的代码提供了大量的重用和灵活性。

<TGridBuilder, TPoint>是实例化类型实例后提供的类型的占位符。它们本身并不是一种类型。在实例化类时提供实际类型:

var instance = new SimpleGridEditor<SlowGridBuilder, LargePoint>();

其中SlowGridBuilderLargePoint是您可以参考的两种实际具体类型。

这允许SimpleGridEditor中的后续方法使用这些具体类型并对它们执行操作。

在您的情况下,您的通用参数也有Type Constraints。这限制了可用作泛型类类型的类的类型,以便集中范围并确保可以完成类中的操作。例如,如果您可以为WaterBuffalo而不是TPoint传递IGridPoint个实例,那么您的类功能可能无法正常运行。