所以,我正在使用' 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){}
但是什么是班级类型?
感谢。
答案 0 :(得分:2)
这些被称为Generic Classes。
通用类允许您对数据执行相同的操作,无论其类型如何。
一个典型的例子是List<T>
。
无论您是否有整数列表new List<int>()
或字符串列表new List<string>()
,您仍然可以.Add()
一个项目,列表,.Remove()
项目列表的基础类型从列表到列表实例无关紧要。这为您的代码提供了大量的重用和灵活性。
<TGridBuilder, TPoint>
是实例化类型实例后将提供的类型的占位符。它们本身并不是一种类型。在实例化类时提供实际类型:
var instance = new SimpleGridEditor<SlowGridBuilder, LargePoint>();
其中SlowGridBuilder
和LargePoint
是您可以参考的两种实际具体类型。
这允许SimpleGridEditor
中的后续方法使用这些具体类型并对它们执行操作。
在您的情况下,您的通用参数也有Type Constraints。这限制了可用作泛型类类型的类的类型,以便集中范围并确保可以完成类中的操作。例如,如果您可以为WaterBuffalo
而不是TPoint
传递IGridPoint
个实例,那么您的类功能可能无法正常运行。