簡體   English   中英

為什么有些管理器可以用作類類型,而其他管理器必須是對象類型

[英]Why some managers can be used as a class type, but the others have to be an object type

我一直在研究 iOS 應用程序開發和 Unity 游戲開發,我注意到在 swift 中,當您需要使用管理器(例如位置管理器)時,您必須將其用作對象,例如:

let manager = CLLocationManager()
manager.requestLocation()

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

SceneManager.LoadScene(0);

造成差異的原因是什么? 是因為我使用的語言,還是我使用的引擎,或者僅僅是因為不同的經理有不同的調用方式?

靜態類不需要實例,因此可以直接調用方法。 文檔中查看:靜態類與非靜態類基本相同,但有一個區別:靜態類無法實例化。 換句話說,您不能使用 new 運算符來創建類類型的變量。 由於沒有實例變量,您可以使用類名本身訪問靜態類的成員。

對於SceneManager的情況,它不是static類,而是靜態方法。 如果你願意,你可以在這里閱讀。

在 c# 和 Javascript 中,很多時候您需要一個實例來訪問確定類型/對象的方法。 這似乎是我不熟悉的CLLocationManager()的情況。

總結一下,你在SceneManager中調用的方法是靜態的, CLLocationManagerrequestLocation估計不是,所以你需要獲取一個調用的實例。

在javascript中,除了static關鍵字本身,你還可以使用這個技巧直接調用Javascript對象的方法,有點像把對象作為命名空間。

var nameSpaceName= {

    foo: function() {
    },

    bar: function() {
    }
};

nameSpaceName.foo();

從美學上講,它消除了代碼中實例的需要,因此可以直接調用其中的方法,但當然Static的概念是完全不同的。 我提到這一點是因為您的問題更多地關注方法的調用方式,而不是背后的概念,因此盡管值得一提的是命名空間/靜態類似的調用方式,但即使是技術概念和目的也是如此不同。

就這些系統中的任何一個而言,經理都不是“東西”。 這只是人類目的的名稱。

這些只是具有不同設計的不同 API。 沒有更多了。

一個期望您實例化它並在其新實例上調用實例方法方法,另一個期望您直接在類上調用類方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM