Czy istnieje jakiś szczególny powód, aby użyć stylu podwójnego dwukropka "::" w stylu C++? Dlaczego nie użyć prostej kropki jak C#?Dlaczego PowerShell używa dwukropka (::) do wywoływania statycznych metod klasy .NET?
Odpowiedz
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.
- 1. Zapobieganie kodowi .NET wywoływania określonych metod?
- 2. Czy mogę zabronić wywoływania metod statycznych na instancję obiektu?
- 3. Guice - Wstrzykiwanie wtyczki do klasy za pomocą statycznych metod pomocniczych
- 4. Dlaczego Python używa "magicznych metod"?
- 5. Testowanie klas statycznych i metod w języku C# .NET
- 6. Powershell Calling .NET Assembly, który używa App.config
- 7. Wskaźniki do metod statycznych w Pythonie
- 8. C# classes - Dlaczego tak wiele metod statycznych?
- 9. jednoczesnego dostępu do metod statycznych
- 10. Używanie atrybutów do metod wywoływania
- 11. Jak używać map() do wywoływania metod klasy na liście obiektów
- 12. Wady metod statycznych w PHP
- 13. Ujawnianie metod statycznych za pomocą klas proxy
- 14. Dziedziczenie metod statycznych w ES6
- 15. Dokumentacja klasy .NET z poziomu programu PowerShell?
- 16. Walidacja @ScriptAssert z dostępem do metod statycznych
- 17. Wywołanie metod statycznych z Spring Security Expressions?
- 18. Groovy meta-programowanie - dodawanie metod statycznych do Object.metaClass
- 19. Java: Ternary bez powrotu. (Do wywoływania metod)
- 20. doładowanie dla metod statycznych - PowerMock
- 21. Pisanie jQuery statycznych metod util
- 22. Korzystanie z metod statycznych lub bez metod statycznych w klasie Dao?
- 23. xCode/deklarowanie metod statycznych w klasie
- 24. Czy lepiej jest mieć jedną instancję klasy lub po prostu mieć kilka statycznych metod?
- 25. Konstruktor alternatywny dla metod statycznych w PHP
- 26. C# Alternatywa dla wirtualnych metod statycznych i podklatek statycznych
- 27. definiowania kilka metod statycznych w C++
- 28. Moduły ES6: Eksportuj pojedyncze klasy metod statycznych LUB wiele pojedynczych metod
- 29. Czy konstruktor statyczny może zmniejszyć wydajność dostępu do metod statycznych?
- 30. Dlaczego JavaScript nie umożliwia bezpośredniego wywoływania metod na liczbach?
Dla kompletności: różni się od C++, w którym operator z czterema kropkami rozpatruje zakresy/przestrzenie nazw. –