Dot-Net

為什麼靜態類只能有靜態成員?

  • August 1, 2012

正如標題所示,我想了解為什麼靜態類只能有靜態成員。我希望它在所有程式語言中都是一樣的。所以我相信所有語言的解釋都是一樣的。

靜態類無法實例化,因此它不會有任何實例,非靜態成員將需要其類的實例才能訪問。由於靜態類不能有任何實例,因此您無法訪問非靜態成員(如果有的話)。

因此靜態類只能有靜態成員

這不是一個設計決定,而是一個合乎邏輯的決定。最簡單的起點是查看概念的相關定義:

**靜態類是無法實例化的類。**這意味著您不能創建屬於該類類型的對象。

**非靜態成員與類的特定實例相關聯。**它們包含專門與該類類型的單個對象相關聯的數據。

因此,如果靜態類包含非靜態成員,您將永遠無法訪問該數據或呼叫該方法,因為您永遠無法實例化該靜態類類型的對象。相反,您必須擁有可以直接從類的靜態實例呼叫的所有靜態成員。

但是,您可以擁有包含靜態成員的非靜態類。這樣,您可以訪問數據或呼叫作為靜態成員公開的方法,而無需實例化該類的對象。但是,您也可以實例化該類類型的對象並訪問非靜態(或實例)成員。例如,如果你有一個類Circle,你可以有靜態成員,比如CalculateArea函式和PI欄位。這些成員通常適用於所有圈子,只是因為它們是圈子。但是您也可以擁有與該類的特定實例相關聯的非靜態成員,因為它們描述了特定的圓形對象。這些可能是欄位DiameterCircumference. 考慮到儲存在該特定實例的非靜態欄位中的數據,您還可以使用非靜態函式來計算圓的面積。

引用自:https://stackoverflow.com/questions/4415572