2013-07-20 18 views

Odpowiedz

20

To jest pytanie do programu Windows PowerShell w akcji.

Operator :: jest statycznym elementem członkowskim. Podczas gdy operator kropki pobrał elementy instancji, operator dwukropka uzyskuje dostęp do elementów statycznych w klasie, tak jak w przypadku metody łączenia w przykładzie na końcu ostatniej sekcji. Lewy argument do statycznej członkiem akcesor ma obowiązek być typu albo typ dosłowny lub wyrazem powrocie typu, jak widać tutaj:

PS (1) > $t = [string] 
PS (2) > $t::join('+',(1,2,3)) 
1+2+3 
PS (3) > 

Zespół projektowy język zdecydował się użyć osobnego operatora dla uzyskiwanie dostępu do metod statycznych ze względu na sposób uzyskiwania dostępu do metod statycznych . Oto problem. Jeśli miał typ mymodule ze statycznym właściwość o nazwie modułu, a następnie wyrażenie

[MyModule].Module

jest niejednoznaczne. Dzieje się tak dlatego, że istnieje również moduł członka instancji na instancji System.Type reprezentującej typ MyModule. Teraz nie można stwierdzić, czy element członkowski "Module" w System.Type lub element "Module" w module MyModule powinien zostać pobrany. Korzystając z operatora dwukropka , usuwasz tę niejednoznaczność.

Uwaga

Inne języki obejść ten niejednoznaczności przy użyciu typeof (operatora). Używając metody typeof() w tym przykładzie, typeof (My Module) .Module pobiera właściwość instancji na obiekcie Type, a MyModule.Module pobiera właściwość statyczną implementowaną przez klasę MyModule.

Bruce Payette (2011-08-02 16: 22: 31.490000-05: 00). Windows PowerShell w akcji, wydanie drugie (Kindle Locations 4494-4507). Manning Publications. Wersja Kindle.

+0

Dla kompletności: różni się od C++, w którym operator z czterema kropkami rozpatruje zakresy/przestrzenie nazw. –

Powiązane problemy