首页 > 解决方案 > 为什么有些管理器可以用作类类型,而其他管理器必须是对象类型

问题描述

我一直在研究 iOS 应用程序开发和 Unity 游戏开发,我注意到在 swift 中,当您需要使用管理器(例如位置管理器)时,您必须将其用作对象,例如:

let manager = CLLocationManager()
manager.requestLocation()

但是在 Unity(使用 C#)中,您可以直接将管理器用作类类型,例如:

SceneManager.LoadScene(0);

造成差异的原因是什么?是因为我使用的语言,还是我使用的引擎,还是仅仅因为不同的经理有不同的调用方式?

标签: c#swiftclassunity3dobject

解决方案


静态类不需要实例,因此可以直接调用方法。从文档中检查:静态类与非静态类基本相同,但有一个区别:不能实例化静态类。换句话说,您不能使用 new 运算符来创建类类型的变量。因为没有实例变量,所以您可以使用类名本身来访问静态类的成员。

对于SceneManager它不是一个static类,而是一个静态方法的情况。如果你愿意,你可以在这里阅读。

在 c# 和 Javascript 中,很多时候您需要一个实例来访问确定类型/对象的方法。这似乎是CLLocationManager()我不熟悉的情况。

总而言之,您调用的方法SceneManager是静态的,并且requestLocation可能CLLocationManager不是,因此您需要获取调用的实例。

在 javascript 中,除了static关键字本身之外,您还可以使用这个技巧来直接调用 Javascript 对象方法,这有点像使用对象作为命名空间。

var nameSpaceName= {

    foo: function() {
    },

    bar: function() {
    }
};

nameSpaceName.foo();

从美学上讲,它消除了代码中对实例的需求,因此可以直接调用其中的方法,但当然存在的概念Static完全不同。我之所以提到这一点,是因为您的问题更多地集中在方法的调用方式上,而不是背后的概念上,因此尽管值得一提的是命名空间/静态类似的调用方式,但即使是技术概念和目的也如此不同。


推荐阅读