2013-07-20 6 views

Antwort

20

Dies ist eine Frage für Windows PowerShell in Aktion.

Der Operator :: ist der statische Member Accessor. Während der Operator dot Instanzenelemente abgerufen hat, greift der Doppelpunktoperator auf statische Member einer Klasse zu, wie dies bei der Methode join im Beispiel am Ende des letzten Abschnitts der Fall ist. Der linke Operand zum statischen Elemente Accessor ist erforderlich, eine typ entweder eine Art wörtliche oder ein Ausdruck sein, eine Art Rückkehr, wie Sie hier sehen:

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

Die Sprache Design-Team wählte einen separaten Antrieb für die Verwendung Zugriff auf statische Methoden wegen der Art, wie statische Methoden zugegriffen werden. Hier ist das Problem. Wenn Sie einen Typ MyModule mit einem statischen Eigenschaft namens Modul hatte, dann der Ausdruck

[MyModule].Module

ist zweideutig. Das liegt daran, dass es auch ein Instanzmitgliedsmodul auf der System.Type-Instanz gibt, die den Typ MyModule darstellt. Jetzt können Sie nicht sagen, ob das Instanzelement "Module" auf System.Type oder das statische Element "Module" auf MyModule abgerufen werden soll. Indem Sie den Doppelpunktoperator verwenden, entfernen Sie diese Mehrdeutigkeit.

Hinweis

Andere Sprachen um diese Mehrdeutigkeit zu erhalten, indem die typeof() Operator. Unter Verwendung von typeof() in diesem Beispiel ruft typeof (Mein Modul) .Module die Instanzeigenschaft für das Type-Objekt ab, und MyModule.Module ruft die statische Eigenschaft ab, die von der MyModule-Klasse implementiert wird.

Bruce Payette (2011-08-02 16: 22: 31.490000-05: 00). Windows PowerShell in Aktion, zweite Ausgabe (Kindle-Standorte 4494-4507). Manning Publikationen. Kindle Edition.

+0

Der Vollständigkeit halber: das unterscheidet sich von C++, wo der Quad-Punkt-Operator Bereiche/Namespaces auflöst. –

Verwandte Themen