PowerShell クラス
PowerShellのクラスを使ってみますクラス
クラスを定義するには class クラス名{} の形で定義します。
#クラスサンプル
class Test {
#プロパティ
[string] $str1
[string] $str2
#コンストラクタ
Test([string]$_str1) {
$this.str1 = $_str1
}
#Get
[string] getStr() {
return $this.str1 + $this.str2
}
#Set
setStr2([string]$_str2) {
$this.str2 = $_str2
}
}
#オブジェクト生成
$testA = New-Object Test("Hello")
$testA.str2 = "World"
write-host $testA.getStr()
#オブジェクト生成
$testB = [Test]::new("abc")
$testB.setStr2("def")
write-host $testB.getStr()
実行結果
HelloWorld
abcdef
クラスからオブジェクトを生成するには、New-Object クラス名 か、[クラス名]::new を実行します。
$testA = New-Object Test("Hello")
$testB = [Test]::new("abc")
リストのコンストラクタ
#クラスサンプル
class Test {
#プロパティ
[Object[]] $objs
#コンストラクタ
Test([Object[]] $objs) {
$this.objs = $objs
}
#Get
[string] getStr([int]$i) {
return $this.objs[$i]
}
}
$ary = @("aaa","bbb")
#オブジェクト生成
$testB = [Test]::new($ary)
write-host $testB.getStr(1)
#bbbが出力
#オブジェクト生成
$testA = New-Object Test($ary)
#New-Object : "Test" のオーバーロードで、引数の数が "2" であるものが見つかりません。 が発生
コンストラクタにリストを渡す場合、New-Objectでオブジェクトを作成するとエラーになります。::newで作成するとエラーになりません。
理由はわかりません。
クラス内のメソッド呼び出し
#クラスサンプル
class Test {
[string] getStr($arg) {
$str = $this.addStr($arg)
return $str
}
[string] addStr($arg) {
return "Hello" + $arg
}
}
#オブジェクト生成
$testB = [Test]::new()
write-host $testB.getStr("World")
#HelloWorldが出力
クラス内のメソッドの呼び出しでは頭に$thisを付けます。
ページのトップへ戻る