Главная > Powershell > Классы в Powershell. Введение, свойства

Классы в Powershell. Введение, свойства

Начиная с версии 5.0 в Powershell появилась возможность использовать свои собственные классы для создания объектов. Естественно, перед тем как создавать объект пользовательского класса, его (класс) нужно определить. Этим сегодня и займёмся.

(Даже если вы не планируете создавать классы всё равно не помешает познакомиться с этой темой, так как это даст понимание модели .Net Framework.)

Вообще классы это большая и сложная тема, но я постараюсь в нескольких статьях всё подробно и просто объяснить.

Классы используются в качестве основы, каркаса, из которых мы будем создавать свои объекты. Другими словами классы – это шаблоны, которые используются для создания объектов (экземпляров класса).

 

Описание класса

Как и функции, и конфигурации, описание класса начинается с ключевого слова (Class), за которым идёт имя класса, а следом в фигурных скобках тело класса:

Class MyClass
{
    ...
}

В теле (описании) класса описываются члены класса: свойства, методы и т.д. В этой статье поговорим о свойствах.

Рассмотрим создание простого класса, описывающего робота. Допустим, наши будущие роботы будут иметь такие свойства:

  • имя ($Name)
  • идентификатор ($Id)
  • дата создания ($Birthday)

(Для начала и простоты. В дальнейшем возможно добавим ещё.)

Таким образом, в простейшем случае, класс может выглядеть следующим образом:

Class Robot
{
    $Name
    $Id
    $Birthday
}

            Готово! Мы подготовили наш первый класс. Теперь можем создавать собственную армию дроидов роботов – объекты (экземпляры класса) на основе нашего класса.

             

            Создание экземпляра класса

            Создавать объект можно классическим способом, используя командлет New-Object:

            $Verter = New-Object -TypeName Robot

            (имя параметра –TypeName можно опустить)

            а можно использовать статический метод  New() (что это такое поговорим в следующих статьях):

            $Verter = [Robot]::new()

             

            Примечание: у одного из гуру Powershell прочёл, что использование метода New() предпочтительнее, так как работает быстрее, но по факту я прироста скорости не заметил, более того, где-то в 20% случаев New() отрабатывал дольше, чем старый знакомый New-Object.

            Как видно, в обоих случаях в качестве типа создаваемого объекта мы указываем имя нашего класса.

            После создания объекта можем заполнять его свойства:

            $Verter.Name = 'Verter'
            $Verter.Id = 1
            $Verter.Birthday = '2017-01-01'

          На этом этапе может возникнуть вопрос: А зачем такие сложности, мы же и раньше могли создавать объекты? Например, вот так:

          $Verter = New-Object -TypeName PSObject -Property @{
              '$Name' = 'Verter'
              'Id' = 5
              'Birthday' = '2017-01-01'
          }

          Во-первых, если посмотреть типы созданных объектов, то увидим, что во втором случае тип объекта – PSCustomObject.

        PS C:\> $Verter.GetType().Name
        PSCustomObject

        Не слишком информативно, правда? Если бы мы его не только что его создали, трудно было-бы догадаться, что вообще находится в переменной $Verter. В то время как при использовании классов, тип объекта определяется именем созданного нами класса:

        PS C:\> $Verter.GetType().name
        Robot

        Во-вторых, использование классов предоставляет кучу возможностей, но обо всём по порядку.

         

        Типы свойств

         

        Здесь ничего нового. Также как и параметрам функций, свойствам классов можно задавать типы и значения по умолчанию. Более того, задавать типы желательно всегда, так как Powershell не всегда корректно определяет типы сам, что может вылезти боком в дальнейшем. Например:

        PS C:\> $Verter.Birthday.GetType().Name
        String

        Powershell определил тип свойства, отвечающего за дату создания, как строку, в то время как мы подразумевали дату. Поэтому добавим в наш класс типы свойств:

        Class Robot
        {
            [String]$Name
            [Int]$Id
            [DateTime]$Birthday
        }

      Теперь при задании свойства $Birthday, экземпляра класса Robot, Powershell будет ожидать дату:

Class Property Type

        Соответственно, при задании имени будет ожидаться строка, а при задании идентификатора – целое число.

        Вроде это всё, что можно было сказать по поводу свойств. В следующих статьях поговорим про методы, атрибуты членов класса и ещё много о чём, так что не переключайтесь, оставайтесь с нами, подписывайтесь и всё такое Smile

Реклама
Рубрики:Powershell Метки: ,
  1. Комментариев нет.
  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: