c# - 为什么有些管理器可以用作类类型,而其他管理器必须是对象类型
问题描述
我一直在研究 iOS 应用程序开发和 Unity 游戏开发,我注意到在 swift 中,当您需要使用管理器(例如位置管理器)时,您必须将其用作对象,例如:
let manager = CLLocationManager()
manager.requestLocation()
但是在 Unity(使用 C#)中,您可以直接将管理器用作类类型,例如:
SceneManager.LoadScene(0);
造成差异的原因是什么?是因为我使用的语言,还是我使用的引擎,还是仅仅因为不同的经理有不同的调用方式?
解决方案
静态类不需要实例,因此可以直接调用方法。从文档中检查:静态类与非静态类基本相同,但有一个区别:不能实例化静态类。换句话说,您不能使用 new 运算符来创建类类型的变量。因为没有实例变量,所以您可以使用类名本身来访问静态类的成员。
对于SceneManager
它不是一个static
类,而是一个静态方法的情况。如果你愿意,你可以在这里阅读。
在 c# 和 Javascript 中,很多时候您需要一个实例来访问确定类型/对象的方法。这似乎是CLLocationManager()
我不熟悉的情况。
总而言之,您调用的方法SceneManager
是静态的,并且requestLocation
可能CLLocationManager
不是,因此您需要获取调用的实例。
在 javascript 中,除了static关键字本身之外,您还可以使用这个技巧来直接调用 Javascript 对象方法,这有点像使用对象作为命名空间。
var nameSpaceName= {
foo: function() {
},
bar: function() {
}
};
nameSpaceName.foo();
从美学上讲,它消除了代码中对实例的需求,因此可以直接调用其中的方法,但当然存在的概念Static
完全不同。我之所以提到这一点,是因为您的问题更多地集中在方法的调用方式上,而不是背后的概念上,因此尽管值得一提的是命名空间/静态类似的调用方式,但即使是技术概念和目的也如此不同。
推荐阅读
- python - 如何使用 Selenium 和 Python 处理 try 循环中的错误
- sql-server - FreeTDS 和 SQL Server 的“未知主机名”
- python - 用于 MacOS 的 pywebview python 库的 javascript 正在使用本地实现,但不是来自远程 Web 服务器
- css - Bootstrap 3 卡片范围对不同屏幕尺寸的响应能力
- html - 如何在桌面上显示一排六列,在移动端显示两排三列?
- python - 使用 AIOfile 读取异步文件
- git - 来自远程分支的 git rebase 问题
- function - Dart Flutter:功能未执行
- security - 我在安装 libc6 时遇到问题:amd64 会破坏语言环境,并且不允许取消配置
- javascript - 收到数据后渲染 MathJax