PowerShell支持OOP吗?

时间:2009-03-25 22:40:58

标签: oop powershell

PowerShell中的Class,Interface,Mixin等概念是什么?它支持OOP吗?如果是这样,我在哪里可以读到这个?

4 个答案:

答案 0 :(得分:10)

您可以使用Add-Type cmdlet

在PowerShell v2.0中定义新类型
  

详细说明

     

Add-Type cmdlet允许您在Windows PowerShell会话中定义.NET类。然后,您可以实例化对象(通过使用New-Object cmdlet)并使用对象,就像使用任何.NET ob一样      JECT。如果向Windows PowerShell配置文件添加“添加类型”命令,则该类将在所有Windows PowerShell会话中可用。

     

您可以通过指定现有的程序集或源代码文件来指定类型,也可以指定源代码或保存在变量中。您甚至可以只指定一个方法,Add-Type将定义      并生成类。您可以使用此功能对Windows PowerShell中的非托管函数进行平台调用(P / Invoke)调用。如果指定源代码,Add-Type将编译指定的源代码      de并生成包含新.NET类型的内存中程序集。

     

您可以使用Add-Type参数指定备用语言和编译器(CSharp是默认值),编译器选项,程序集依赖项,类命名空间以及类型的名称和       结果组装。

help Add-Type了解更多信息。

另见,见:

答案 1 :(得分:7)

PowerShell更像是一种OOP消费者语言。它可以利用大多数.NET Framework,但它本身不支持创建接口,类,当然也不支持mixins。 PowerShell的类型系统所基于的.NET不支持mixins。 PowerShell支持通过Add-Member cmdlet向现有对象动态添加属性和方法。

Add-Type很有用但是如果你必须转义到C#或VB来定义一个实现特定接口的类或类,我不会认为第一个类支持创建类/接口。

如果您正在寻找一些免费的学习资料,请查看Effective Windows PowerShell

答案 2 :(得分:1)

Powershell的第5版似乎支持一些主流OOP。

归功于这个家伙:https://xainey.github.io/2016/powershell-classes-and-concepts/

班级示例:

    class myColor
    {
        [String] $Color
        [String] $Hex

        myColor([String] $Color, [String] $Hex)
        {
            $this.Color = $Color
            $this.Hex = $Hex
        }

        [String] ToString()
        {
            return $this.Color + ":" + $this.Hex
        }
    }

抽象类的示例:

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"
    }
}

答案 3 :(得分:0)

PowerShell管道处理对象,而不仅仅是Unix管道的文本流。所有变量也是对象的实例。这些都是.NET对象,BTW。

以下是通过管道连接到get-member cmdlet的“ls”命令输出的一部分:

    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显示您管道对象的成员。您可以看到这些是System.IO.DirectoryInfo类的实际成员。