PowerShell поддерживает ООП? - PullRequest
7 голосов
/ 26 марта 2009

Что такое такие понятия, как Class, Interface, Mixin в PowerShell? Это поддерживает ООП? Если да, где я могу прочитать об этом?

Ответы [ 4 ]

10 голосов
/ 26 марта 2009

Вы можете определить новые типы в PowerShell v2.0 с помощью командлета Add-Type:

ПОДРОБНОЕ ОПИСАНИЕ

Командлет Add-Type позволяет определить класс .NET в сеансе Windows PowerShell. Затем вы можете создавать экземпляры объектов (используя командлет New-Object) и использовать объекты так же, как если бы вы использовали любой .NET ob ект. Если вы добавите команду Add-Type в свой профиль Windows PowerShell, класс будет доступен во всех сеансах Windows PowerShell.

Вы можете указать тип, указав существующую сборку или файлы исходного кода, или вы можете указать исходный код в строке или сохранить в переменной. Вы даже можете указать только метод, а Add-Type определит и создать класс. Вы можете использовать эту функцию для вызова платформы (P / Invoke) неуправляемых функций в Windows PowerShell. Если вы указываете исходный код, Add-Type компилирует указанный исходный код и генерирует сборку в памяти, которая содержит новые типы .NET.

Вы можете использовать параметры Add-Type для указания альтернативного языка и компилятора (CSharp по умолчанию), параметров компилятора, зависимостей сборки, пространства имен класса, а также имен типа и итоговая сборка.

help Add-Type для получения дополнительной информации.

Также см .:

7 голосов
/ 26 марта 2009

PowerShell - это скорее потребительский язык ООП. Он может использовать большую часть .NET Framework, но изначально не поддерживает создание интерфейсов, классов и, конечно, не миксины. .NET, на которой основана система типов PowerShell, не поддерживает миксины. PowerShell поддерживает динамическое добавление свойств и методов к существующему объекту с помощью командлета Add-Member.

Add-Type полезен, но если вам нужно перейти на C # или VB, чтобы определить класс или класс, который реализует определенный интерфейс, я бы не подумал, что первый класс поддерживает создание классов / интерфейсов.

Если вы ищете бесплатный учебный материал, ознакомьтесь с Effective Windows PowerShell .

1 голос
/ 12 января 2018

Версия 5 Powershell, похоже, поддерживает некоторые из основных ООП.

Вся заслуга этого парня: 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"
    }
}
0 голосов
/ 26 марта 2009

Конвейер PowerShell работает с объектами, а не только с текстовым потоком, как конвейер Unix. Все переменные также являются экземплярами объектов. Это все .NET объекты, кстати.

Вот часть вывода команды "ls", переданной в командлет 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 отображает членов объекта, к которому вы подключаетесь. Вы можете видеть, что это фактические члены класса System.IO.DirectoryInfo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...