hakeの日記

Windows環境でプログラミングの勉強をしています。

PowerShell - クラス

バージョン5からクラスが使用可能になったようです。

class Person {
    [string] $name
    [int] $age

    # コンストラクタ
    Person() {
        $this.name = "No Name"
        $this.age = 0
    }

    Person([string]$name, [int]$age) {
        $this.name = $name
        $this.age = $age
    }

    # メソッド
    [string]getName(){
        return $this.name
    }

    [int]getAge(){
        return $this.age
    }

    [void]talk([string]$str){
        Write-Host "${str}, I'm $($this.name), $($this.age) years old."
    }
}

$someone = New-Object Person
Write-Host $someone.getName()        # No Name
Write-Host $someone.getAge()         # 0

$taro = New-Object Person("Taro",20) 
$taro.talk("Hello")                  # Hello, I'm Taro, 20 years old.

継承

いまのところ、親クラスのコントラクタやメソッドを呼ぶ方法が不明です。

class Employee : Person {
    [int]$id

    Employee(){
        $this.id = 0
    }

    Employee([string]$name, [int]$age, [int]$id) {
        $this.name = $name
        $this.age = $age
        $this.id = $id
    }

    # メソッドの上書き
    [void]talk([string]$str){
        Write-Host "${str}, I'm $($this.name), $($this.age) years old."
        Write-Host "My ID is $($this.id)."
    }
}

$jiro = New-Object Employee("Jiro",20, 1234) 
$jiro.talk("Good Morning")
#     Good Morning, I'm Jiro, 20 years old.
#     My ID is 1234.