Gibt es einen bestimmten Grund für die Verwendung von C++ - Stil Doppel-Doppelpunkt '::'? Warum nicht einen einfachen Punkt wie C# verwenden?Warum PowerShell doppelter Doppelpunkt (::) verwenden, um statische Methoden einer .NET-Klasse aufzurufen?
Antwort
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.
- 1. Was macht '::' (doppelter Doppelpunkt) in JavaScript?
- 2. Python Statische Methoden, warum?
- 3. Instanziieren Sie eine Klasse, um eine Methode aufzurufen oder statische Methoden zu verwenden?
- 4. Fehler: "Doppelter Doppelpunkt in Host-ID"
- 5. Warum existieren statische Create-Methoden?
- 6. Was bedeutet :: (doppelter Doppelpunkt) in Ruby?
- 7. Statische Methoden in ASP.NET
- 8. Öffentliche statische Methoden und öffentliche Methoden
- 9. Unterschied zwischen doppelter Doppelpunkt und Pfeiloperatoren in PHP?
- 10. Wie "setTimeout" verwenden, um Objekt selbst aufzurufen
- 11. Für die sofortige Variablenzuweisung, doppelter Doppelpunkt oder eine?
- 12. Python statische Methoden - wie ein Verfahren aus einer anderen Methode aufzurufen
- 13. Wann sollte ich statische Methoden verwenden?
- 14. Statische Methoden
- 15. Warum Doppelpunkt sintax Fehler
- 16. Was macht doppelter Doppelpunkt vor der Ausdrucksvariablen in angular js?
- 17. Konnte dotnet Methoden von Powershell
- 18. C#: Konsolenanwendung - statische Methoden
- 19. Entfernen doppelter Werte aus einem PowerShell-Array
- 20. Zugreifen auf statische Elementvariablen
- 21. Statische Methoden erfordern var
- 22. C++ Singleton Vs statische Methoden
- 23. Warum erlaubt Go mir Methoden aufzurufen, die nicht implementiert sind?
- 24. F # Private statische Methoden
- 25. F # Multiline Statische Methoden
- 26. Statische Methoden und Fadensicherheit
- 27. Werden statische Methoden immer im Speicher gehalten?
- 28. Warum verwenden "dieses" Schlüsselwort, um superclass Methoden zu erhalten
- 29. Aufrufe nicht statische Methoden einer Klasse
- 30. Mongoose 'statische' Methoden vs. 'Instanz' Methoden
Der Vollständigkeit halber: das unterscheidet sich von C++, wo der Quad-Punkt-Operator Bereiche/Namespaces auflöst. –