C# Unity开发人员如何约束从对象派生的泛型类型参数?

C# Unity开发人员如何约束从对象派生的泛型类型参数?,c#,unity3d,generics,constraints,C#,Unity3d,Generics,Constraints,Unity开发人员如何约束从对象派生的泛型类型参数 在寻找问题的答案时,我走过来。答案如下: 这两个约束之间没有区别,只是其中一个约束不允许用于显式声明 证明不可能约束在对象上。在Unity中,我们可以看到以下方法: public static T Instantiate<T>(T original, Vector3 position, Quaternion rotation) where T : Object; 公共静态T实例化(T原始,向量3位置,四元数旋转),其中T:Obje

Unity开发人员如何约束从对象派生的泛型类型参数

在寻找问题的答案时,我走过来。答案如下:

这两个约束之间没有区别,只是其中一个约束不允许用于显式声明

证明不可能约束在对象上。在Unity中,我们可以看到以下方法:

public static T Instantiate<T>(T original, Vector3 position, Quaternion rotation) where T : Object;
公共静态T实例化(T原始,向量3位置,四元数旋转),其中T:Object;


发生这种情况是因为Unity使用的是Mono,而不是CLR吗?

这是因为
对象
约束不是
系统对象
,而是
UnityEngine.Object
,您正在查看的类

例如

//public class Object { }

public class MyClass<T> where T : Object { }
//公共类对象{}
公共类MyClass,其中T:Object{}
未能编译,错误为:

CS0702约束不能是特殊类“对象”


…但如果您取消注释第一行,将成功。

Unity有自己的定义,它不同于受约束的System.Object。也许我误解了您的问题或不理解它,但您是否知道Unity Object类与系统命名空间中的类不同:哦。哈哈,我错过了这么容易注意到的一点。谢谢你帮助我。:)英雄联盟我敢推测不止一个Doh!由于这个命名决定,来自Unity dev团队的成员。@qqqqq你不是第一个被this@qqqqqqq之所以选择它,是因为它主要是GameObject和ScriptableObject的基类,然后是所有组件和其他资产。。虽然在我看来,他们至少可以称之为
UnityObject
^^但我一直在考虑,我会将其命名为Unit。