Co jest takiego w klasach, interfejsach, Mixin w PowerShell? Czy obsługuje OOP? Jeśli tak, to gdzie mogę o tym przeczytać?Czy PowerShell obsługuje OOP?
Odpowiedz
Można zdefiniować nowe typy PowerShell v2.0 pomocą Add-Type
komandletu:
SZCZEGÓŁOWY OPIS
Add-Type cmdlet umożliwia zdefiniowanie klasy .NET w sesji środowiska Windows PowerShell . Następnie można utworzyć instancję obiektów (za pomocą cmdletu New-Object) i użyć obiektów, tak jak przy użyciu dowolnego .NET ob ject. Jeśli dodasz polecenie Add-Type do profilu Windows PowerShell, klasa będzie dostępna we wszystkich sesjach Windows PowerShell.
Można określić typ, określając istniejący zbiór lub pliki kodu źródłowego lub można określić kod źródłowy w wierszu lub zapisać w zmiennej. Możesz nawet określić tylko metodę, a Add-Type zdefiniuje i wygeneruje klasę. Możesz użyć tej funkcji, aby wywoływać wywołania platformy (P/Invoke) do niezarządzanych funkcji w Windows PowerShell. Jeśli określisz kod źródłowy, Add-Type skompiluje określone źródło i wygeneruje zespół w pamięci zawierający nowe typy .NET.
Możesz użyć parametrów Add-Type, aby określić alternatywny język i kompilator (domyślnie CSharp), opcje kompilatora, zależności złożenia, przestrzeń nazw klas oraz nazwy tego typu i wynikowy zestaw montażowy .
help Add-Type
, aby uzyskać więcej informacji.
Zobacz również:
zajmuje rurociągów PowerShell z obiektami, a nie tylko tekst Stream rurociąg Unix robi. Wszystkie zmienne są również instancjami obiektów. To są wszystkie obiekty .NET, BTW.
Oto część wyjściu polecenia „ls” rurami do apletu polecenia Get-Member:
PS C:\Documents and Settings\Administrator.DEV-3DPST1-SWK> ls | get-member
TypeName: System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
Create Method System.Void Create(DirectorySecurity directorySecurity), System.Void Create()
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)
CreateSubdirectory Method System.IO.DirectoryInfo CreateSubdirectory(String path), System.IO.Director...
Delete Method System.Void Delete(), System.Void Delete(Boolean recursive)
Equals Method System.Boolean Equals(Object obj)
GetAccessControl Method System.Security.AccessControl.DirectorySecurity GetAccessControl(), System....
GetDirectories Method System.IO.DirectoryInfo[] GetDirectories(String searchPattern), System.IO.D...
GetFiles Method System.IO.FileInfo[] GetFiles(String searchPattern), System.IO.FileInfo[] G...
GetFileSystemInfos Method System.IO.FileSystemInfo[] GetFileSystemInfos(String searchPattern), System...
GetHashCode Method System.Int32 GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetObjectData Method System.Void GetObjectData(SerializationInfo info, StreamingContext context)
GetType Method System.Type GetType()
get_Attributes Method System.IO.FileAttributes get_Attributes()
get_CreationTime Method System.DateTime get_CreationTime()
get-member wyświetla członków obiektu, który do niego rury. Widać, że są to rzeczywiste elementy klasy System.IO.DirectoryInfo.
PowerShell jest bardziej językiem konsumenckim OOP. Może wykorzystywać większość platformy .NET Framework, ale nie wspiera natywnie tworzenia interfejsów, klas, a na pewno nie miesza. .NET, na którym oparty jest system typu PowerShell, nie obsługuje mixinów. PowerShell obsługuje dynamiczne dodawanie właściwości i metod do istniejącego obiektu za pomocą polecenia cmdlet Add-Member.
Add-Type jest użyteczny, ale jeśli musisz uciec do C# lub VB, aby zdefiniować klasę lub klasę, która implementuje konkretny interfejs, nie uważam, że pierwsza klasa obsługuje tworzenie klas/interfejsów.
Jeśli szukasz bezpłatnego materiału do nauki, sprawdź: Effective Windows PowerShell.
Wydaje się, że wersja 5 Powershell obsługuje niektóre główne OOP.
Wszystko zasługa tego faceta: https://xainey.github.io/2016/powershell-classes-and-concepts/
przykładem klasy:
class myColor
{
[String] $Color
[String] $Hex
myColor([String] $Color, [String] $Hex)
{
$this.Color = $Color
$this.Hex = $Hex
}
[String] ToString()
{
return $this.Color + ":" + $this.Hex
}
}
przykładem klasy abstrakcyjnej:
class Foo
{
Foo()
{
$type = $this.GetType()
if ($type -eq [Foo])
{
throw("Class $type must be inherited")
}
}
[string] SayHello()
{
throw("Must Override Method")
}
}
class Bar : Foo
{
Bar()
{
}
[string] SayHello()
{
return "Hello"
}
}
Link do rozwiązania jest mile widziany, ale upewnij się, że twoja odpowiedź jest przydatna bez niego: [dodaj kontekst wokół linku] (// meta.stackexchange.com/a/8259), aby inni użytkownicy mieli pojęcie, co to jest i dlaczego tam jest, a następnie zacytuj najważniejszą część strony, do której prowadzi link, jeśli strona docelowa jest niedostępna. [Odpowiedzi, które są niewiele więcej niż link, mogą zostać usunięte.] (// stackoverflow.com/help/deleted-answers) – Simon
- 1. Czy warto używać OOP w PHP?
- 2. Czy czysta kompozycja łamie koncepcje OOP?
- 3. Zamęt w koncepcji OOP?
- 4. OOP Projekt Pytanie
- 5. OOP: dobry projekt klasy
- 6. Czy PetaPoco obsługuje wyliczenia?
- 7. Czy Mono obsługuje XAML?
- 8. Czy Winapi obsługuje globalnie?
- 9. Czy libspotify obsługuje oauth
- 10. Czy SystemVerilog obsługuje downcasting?
- 11. Czy Heroku obsługuje PHP?
- 12. Czy SQLite obsługuje SCOPE_IDENTITY?
- 13. Czy CMake obsługuje Python3?
- 14. Czy SQLAlchemy obsługuje buforowanie?
- 15. Czy SQLite obsługuje replikację?
- 16. Czy Ember.js obsługuje IE6?
- 17. Czy Node.js obsługuje paralelizm?
- 18. Czy Dapper obsługuje Enums?
- 19. Czy ormlite obsługuje dziedziczenie?
- 20. Czy Cassandra obsługuje sharding?
- 21. Czy Catboost obsługuje python3?
- 22. Czy EF7 obsługuje wyliczenia?
- 23. Czy Jenkins obsługuje XUnit.Net?
- 24. Czy Android obsługuje log2
- 25. Czy Android obsługuje OpenCL?
- 26. Tworzenie klasy właściwości rozszerzalnych (OOP)
- 27. OOP - bez GET/SET
- 28. OOP vs JavaScript
- 29. Czy weblogic obsługuje CDI Beans?
- 30. czy przeglądarka internetowa obsługuje e.preventDefault
dobra odpowiedź i bardzo ładne książki. Dziękujemy za jedno i drugie! –