Главная > Powershell > Классы в Powershell. Ключевое слово hidden

Классы в Powershell. Ключевое слово hidden

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

Вообще, сначала планировал сделать одну статью на эту тему, но “Остапа понесло”, поэтому для простоты восприятия решил разбить одну большую статью, на две не очень больших.

Сегодня поговорим о том, как спрятать члены класса от посторонних глаз.

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

Class Robot
{
    # Свойства
    [string]$Name
    [int]$Id
    [DateTime]$Birthday
    
    # Метод, вызывающий улыбку
    Smile()
    {
        Write-Host ':)'
    }
    
    # Метод - шаг
    Go([int]$Step)
    {
        Write-Host ('-'*$Step)
    }
}

 

Ключевое слово hidden позволяет позволяет делать члены класса скрытыми. При указании этого ключевого слова члены класса (свойства, методы и др.) не отображаются через командлет Get-Member по умолчанию. Чтобы увидеть скрытые члены нужно командлету Get-Member задать параметр –Force, также для них не работает автодополнение.

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

Добавляем новое свойство, которое объявляем скрытым:

hidden [int]$StepCount

Ключевое слово можно поставить как перед типом, так и после, но “best practice” – ставить в начале, чтобы выделить на фоне остальных свойств.

Также, для подсчёта количества пройденных шагов, нужно модифицировать метод, позволяющий роботу ходить – Go(), а именно добавить к только что объявленному скрытому свойству $StepCount, количество шагов, пройденное при каждом вызове метода.

Для того, чтобы обратиться из класса к свойствам и методам этого самого класса, используется конструкция $this.имя_свойства:

Go([int]$step) 
{ 
    Write-Host ('-'*$Step)

    $this.StepCount += $Step 
}

Теперь, при вызове метода Go() наш робот делает заданное переменной $Step количество шагов, и прибавляет это значение к переменной $StepCount. При следующем вызове метода Go() робот вновь делает заданное количество шагов, и прибавляет это значение к количеству уже пройденных шагов:

PS C:\> $Verter = New-Object Robot
PS C:\> $Verter.Go(3)
---
PS C:\> $Verter.Go(2)
--
PS C:\> $Verter.Go(5)
-----
PS C:\> $Verter.StepCount
10

На данном этапе наш класс выглядит так:

Class Robot
{
    # Свойства
    [string]$Name
    [int]$Id
    [DateTime]$Birthday
    
    # Скрытое свойство
    hidden [int]$StepCount
    
    # Метод, вызывающий улыбку
    Smile()
    {
        Write-Host ':)'
    }
    
    # Метод - шаг
    Go([int]$Step) 
    { 
        Write-Host ('-'*$Step)
        $this.StepCount += $Step 
    }
}

Как уже говорилось выше, скрытое свойство не выводится через Get-Member (только с параметром –Force), и для него не работает автодополнение:

 Members of class

Обратиться к скрытому свойству можно только написав имя свойства вручную. Также можно и “хакнуть” нашего робота изменив это значение.

На сегодня всё, в следующей статье рассмотрим ключевое слово static.

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

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

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