Điều gì về các khái niệm như Class, Interface, Mixin trong PowerShell? Nó có hỗ trợ OOP không? Nếu vậy, tôi có thể đọc về điều này ở đâu?PowerShell có hỗ trợ OOP không?
Trả lời
Bạn có thể xác định các loại mới trong PowerShell v2.0 sử dụng Add-Type
cmdlet:
CỤ THỂ TẢ
Add-Type cmdlet phép bạn xác định một lớp .NET trong phiên Windows PowerShell của bạn . Sau đó bạn có thể khởi tạo các đối tượng (bằng cách sử dụng lệnh ghép ngắn đối tượng mới) và sử dụng các đối tượng, giống như bạn sử dụng bất kỳ đối tượng .NET ob nào. Nếu bạn thêm một lệnh Add-Type vào hồ sơ Windows PowerShell của bạn, lớp sẽ có sẵn trong tất cả các phiên Windows PowerShell.
Bạn có thể chỉ định loại bằng cách chỉ định tệp lắp ráp hoặc mã nguồn hiện có hoặc bạn có thể chỉ định mã nguồn trong dòng hoặc được lưu trong biến. Bạn thậm chí có thể chỉ định một phương thức và Add-Type sẽ xác định và tạo lớp. Bạn có thể sử dụng tính năng này để thực hiện cuộc gọi Platform Invoke (P/Invoke) đến các chức năng không được quản lý trong Windows PowerShell. Nếu bạn chỉ định mã nguồn, Add-Type biên dịch mã nguồn được chỉ định de và tạo một hội đồng trong bộ nhớ có chứa các loại .NET mới.
Bạn có thể sử dụng tham số Add-Type để chỉ định ngôn ngữ thay thế và trình biên dịch (CSharp là mặc định), tùy chọn trình biên dịch, phụ thuộc lắp ráp, không gian tên lớp và tên của loại và kết quả .
help Add-Type
để biết thêm thông tin.
Ngoài ra, xem:
Các thỏa thuận đường ống PowerShell với các đối tượng, không chỉ là một văn bản dòng một một đường ống dẫn Unix không. Tất cả các biến là trường hợp của các đối tượng là tốt. Đây là tất cả các đối tượng .NET, BTW.
Dưới đây là một phần của đầu ra của một "ls" lệnh đường ống để cmdlet Get-Thành viên:
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 thành viên hiển thị các thành viên của đối tượng bạn ống với nó. Bạn có thể thấy rằng đây là những thành viên thực sự của lớp System.IO.DirectoryInfo.
PowerShell có nhiều ngôn ngữ tiêu dùng OOP hơn. Nó có thể sử dụng hầu hết các .NET Framework nhưng nó không hỗ trợ tạo các giao diện, các lớp và chắc chắn không phải là mixin. .NET, hệ thống kiểu PowerShell dựa trên, không hỗ trợ mixin. PowerShell hỗ trợ bổ sung động các thuộc tính và phương thức cho một đối tượng hiện có thông qua lệnh ghép ngắn Add-Member.
Add-Type là hữu ích nhưng nếu bạn phải thoát ra C# hoặc VB để xác định một lớp hoặc một lớp thực hiện một giao diện cụ thể, tôi sẽ không xem xét lớp đầu tiên hỗ trợ tạo lớp/giao diện.
Nếu bạn đang tìm kiếm một số tài liệu học tập miễn phí, hãy xem Effective Windows PowerShell.
Phiên bản 5 của Powershell dường như hỗ trợ một số OOP chính thống.
Tất cả tín dụng đi vào anh chàng này: https://xainey.github.io/2016/powershell-classes-and-concepts/
Ví dụ về một lớp học:
class myColor
{
[String] $Color
[String] $Hex
myColor([String] $Color, [String] $Hex)
{
$this.Color = $Color
$this.Hex = $Hex
}
[String] ToString()
{
return $this.Color + ":" + $this.Hex
}
}
Ví dụ về một lớp trừu tượng:
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"
}
}
Một liên kết đến một giải pháp được chào đón, nhưng hãy đảm bảo câu trả lời của bạn hữu ích mà không có nó: [thêm ngữ cảnh xung quanh liên kết] (// meta.stackexchange.com/a/8259) để người dùng của bạn sẽ có một số ý tưởng và tại sao nó ở đó, sau đó trích dẫn phần có liên quan nhất của trang bạn đang liên kết đến trong trường hợp trang đích không có sẵn. [Câu trả lời có nhiều hơn một liên kết có thể bị xóa.] (// stackoverflow.com/help/deleted-answers) – Simon
- 1. Hỗ trợ Mã VS2010 có hỗ trợ nUnit không?
- 2. Có hỗ trợ tập lệnh nào trên Windows Phone không?
- 3. Weblogic có hỗ trợ CDI Beans không?
- 4. iPhone có hỗ trợ XML-RPC không?
- 5. Mono có hỗ trợ XAML không?
- 6. GCC có hỗ trợ lâu dài không?
- 7. VC++ có hỗ trợ _mm_malloc không?
- 8. AutoMapper có hỗ trợ LINQ không?
- 9. Arduino có hỗ trợ luồng không?
- 10. IE10 có hỗ trợ FormData() không?
- 11. TypeScript có hỗ trợ TouchEvent không?
- 12. S3 có hỗ trợ HTTP pipelining không?
- 13. GWT có hỗ trợ php không?
- 14. Có định nghĩa hỗ trợ tryhaskell.org không?
- 15. Cassandra có hỗ trợ sharding không?
- 16. MemoryCache có hỗ trợ vùng không?
- 17. Tomcat có hỗ trợ TLS v1.2 không?
- 18. DS.FixtureAdapter có hỗ trợ sideload không?
- 19. CMake có hỗ trợ Python3 không?
- 20. PhantomJS có hỗ trợ cookie không?
- 21. Golang TLS có hỗ trợ IE8 không?
- 22. PyCharm có hỗ trợ Jinja2 không?
- 23. Wcf basicHttpBinding có hỗ trợ PerSession không?
- 24. PySide có hỗ trợ Python 3 không?
- 25. Qemu/kvm có hỗ trợ ovf không?
- 26. Dapper có hỗ trợ Enums không?
- 27. Hỗ trợ SQLite có SCOPE_IDENTITY không?
- 28. CoreText có hỗ trợ Caps nhỏ không?
- 29. Ormlite có hỗ trợ kế thừa không?
- 30. Cocos2d có hỗ trợ ARC không?
Tốt câu trả lời, và cuốn sách rất tốt đẹp. Cảm ơn cả hai! –