2013-07-20 60 views

回答

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版。

+0

爲了完整:這與C++中的四點運算符解析範圍/名稱空間不同。 –