我目前正在审核Unity代码。
我正在研究如何使Singleton变得通用。
我正慢慢地从辛格尔顿学习。
在审核代码时我有很多问题。
就是这样:public class GameSingleton<T> : MonoBehaviour where T : MonoBehaviour
和
和
public class GameManager : GameSingleton<GameManager>{}
我使用这些代码,这是什么意思?
和
这就是全部..
我需要学习什么来理解这些事情?
作为初学者,我不太了解。我需要你的帮助。
答案 0 :(得分:1)
1。where T : MonoBehaviour
,表示此类使用的任何泛型必须继承MonoBehaviour
,否则会出现编译时错误
2.经理(根据我的经验)通常是单身人士,因为资源旋转时间很长。例如,如果您的管理员正在管理与redis
服务器的连接,并且正在使用stackexchanges redis nuget包。他们明确声明你应该只打开其中一个连接,因为它是线程安全的并且具有相对广泛的创建方法。
3. public class Gamemanager : GameSingleton<GameManager>.{}
这意味着您有一个GameManager
类,其继承GameSingleton
并使用GameManager
作为您的通用。
4.要了解遗产和泛型,我会研究mcirosofts c# tutorial
5.为了理解团结,我会研究unity
答案 1 :(得分:0)
1)这意味着您要创建的单身人士的T
类型必须从MonoBehaviour
继承,否则您将收到编译错误。
2)因为通常你不希望特定的经理在场景中出现多次(即实例数)。例如,考虑一个处理所有ScriptManager
,FixedUpdate
和Update
回调的LateUpdate
,而不是让Unity处理它们:你不想要多个这样的经理出现在现场。 Singleton模式满足此条件(场景中不超过ScriptManager
的一个实例)。
3)这意味着您告诉编译器类型T
是GameManager
。如果您查看班级GameSingleton<T>
的代码,您会看到其中包含private static T _instance
,public static T Instance
属性等,并且GameSingleton
属性_instance
1}}类知道Instance
和GameManager
必须是T
类型。此外,您可以通过更改类型var func1 = new Promise(function(resolve,reject){
// get's executed without reason
// do something
if(var1 && var2){
resolve(true);
}
});
var func2 = new Promise(function(resolve,reject){
// get's executed without reason
// do more
if(var3 && var4){
resolve(true);
}
});
streamToPromise(stream).then(function (operation) {
// do more
// doesn't get executed
if(varX && varY){
func1()
.then(func2)
.then(func3)
.then(funcFinal)
.catch(function (error) {
// console log error
}
}
}
(即:GameManager,ScriptManager,CubesManager等)来创建不同的管理器。
4)你需要学习C#generics。