トッカンソフトウェア

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を付けます。

ページのトップへ戻る