【问题标题】:What this do and where to use, how it is useful? C# Class type?这是做什么的,在哪里使用,它有什么用处? C# 类类型?
【发布时间】:2016-01-09 01:13:58
【问题描述】:

所以,我正在使用统一引擎的“网格”资源来制作基于网格的 2d 游戏,

从它的脚本来看,有这样的类名,

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

所以我对 SimpleGridEditor 部分很好奇。

这是什么?,为什么使用它,我应该在哪里,什么时候这样使用?

我可以理解参数的类型,例如,

void SomeFunc(int a, string b){}

但是类的类型是什么?

谢谢。

【问题讨论】:

  • 请阅读您正在使用的标签,标签unity明确表示它不适用于unity游戏引擎。

标签: c# class unity3d types


【解决方案1】:

这些被称为Generic Classes

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

一个经典的例子是List&lt;T&gt;

不管你有没有整数列表new List&lt;int&gt;()或字符串列表new List&lt;string&gt;(),你仍然可以.Add()一个项目,到列表,.Remove()一个项目从列表等等。底层从列表到列表实例,列表的类型无关紧要。这为您的代码提供了令人难以置信的重用和灵活性。

&lt;TGridBuilder, TPoint&gt; 都是类型的占位符,一旦实例化该类型的实例,提供该类型。他们还不是自己的类型。您在实例化类时提供实际类型:

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

其中SlowGridBuilderLargePoint 是您可以引用的两个实际具体类型。

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

在您的情况下,您的泛型参数上还有Type Constraints。这限制了可以用作通用类类型的类的类型,以集中范围并确保可以完成类内的操作。例如,如果您可以为 TPoint 而不是 IGridPoint 传递一个 WaterBuffalo 实例,那么您的类的功能可能无法按预期工作。

【讨论】:

  • 我可以理解'where'关键字,但我仍然不太了解 [SimpleGridEditor] 部分。
  • TGridBuilder 和 TPoint 是您需要传递类的类型参数。
  • 好的谢谢。但是如果我像 'class SimpleGridEditor : GLEditor' 一样使用(无类型),我会有什么不便?
  • 你不能。它不是有效的语法,也不会编译。如果您的目标需要泛型类型,您还需要使用满足泛型约束的具体类型对其进行实例化。您必须提供类型参数。
  • 那么从根本上说,为什么要使用上面的类类型结构呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多