是否有任何具體的理由使用C++風格的雙冒號'::'?爲什麼不使用像c#這樣的簡單點?爲什麼PowerShell使用雙冒號(::)來調用.NET類的靜態方法?
7
A
回答
20
這是Windows PowerShell in Action中的一個問題。
::運算符是靜態成員存取器。儘管點 運算符檢索到實例成員,但雙冒號運算符 可以訪問類中的靜態成員,而在最後一節結尾處的示例中的加入 方法的情況就是如此。左操作數 的靜態成員訪問需要是一個類型或者一個類型 文字或返回一個類型,你在這裏看到的表達式:
PS (1) > $t = [string] PS (2) > $t::join('+',(1,2,3)) 1+2+3 PS (3) >
語言設計團隊選擇使用一個單獨的操作由於訪問靜態方法 的方式訪問靜態方法。這是問題。如果你有一個類型MyModule的一個靜態 屬性調用模塊,則表達式
[MyModule].Module
是 曖昧。這是因爲還有一個實例成員模塊 表示類型爲MyModule的System.Type實例。現在,您不能通過 判斷是否應檢索System.Type上的「Module」實例成員或MyModule上的「Module」靜態成員。通過使用雙冒號操作符 ,可以消除這種不明確性。
注意
其他語言使用的typeof()運算符 解決這個歧義。在本例中使用 typeof(),typeof(My Module).Module檢索Type對象上的 實例屬性,MyModule.Module檢索由MyModule類實現的靜態屬性 。
Bruce Payette(2011-08-02 16:22:31.490000-05:00)。 Windows PowerShell in Action,第二版(Kindle Locations 4494-4507)。曼寧出版物。 Kindle版。
相關問題
- 1. 爲什麼用雙冒號表示法指定動態類方法?
- 2. 爲什麼可以調用非靜態類的靜態方法?
- 3. 。 VS ::(點與雙冒號)調用方法
- 4. 爲什麼我應該使用靜態方法來使用此回調?
- 5. 如何用靜態方法來調用靜態類(UnitOfWork case)?
- 6. 爲什麼庫類會調用靜態加載方法?
- 7. 爲什麼調用和靜態方法使用對象?
- 8. 調用靜態類方法
- 9. 使用類型調用靜態方法
- 10. PowerShell中,交互調用靜態方法
- 11. 雙冒號(::)類定義方法聲明
- 12. 爲什麼允許靜態方法調用私有方法?
- 13. 如何調用公共靜態類的方法來使用?
- 14. 從靜態基類方法調用靜態派生類方法
- 15. 從.NET atribute調用靜態方法
- 16. 調用類類型的靜態方法
- 17. 在MATLAB中調用.NET通用類的靜態方法?
- 18. 使用方法調用靜態方法?
- 19. 爲什麼最好從方法的類的實例中靜態地調用靜態方法?
- 20. 通過從PowerShell反射來調用靜態方法
- 21. 在PowerShell中逃脫冒號的方法是什麼?
- 22. C#靜態類爲什麼使用?
- 23. 爲什麼在C#中的靜態方法中通過類實例調用非靜態方法
- 24. 調用第二類靜態方法來聲明變量的類
- 25. 調用一類的非靜態方法
- 26. 調用靜態方法的一類
- 27. 如何調用靜態方法的類
- 28. 調用C類的靜態方法#
- 29. 如何調用類的靜態方法?
- 30. 調用其他類的靜態方法
爲了完整:這與C++中的四點運算符解析範圍/名稱空間不同。 –