PowerShellでクラス(みたいなもの)を作ってみる
PowerShellでクラス(みたいなもの)を作ってみた。
# コンストラクタ param([string]$firstName, [string]$lastName) class Person | property FirstName $firstName | property LastName $lastName | def get_FullName { return "{0} {1}" -f $this.FirstName, $this.LastName }
これを「Person.ps1」というファイル名で保存する。使う時はこんな↓感じ
PS > $obj = Person ディラン マッケイ
このオブジェクトのメンバーを見てみると
PS > $obj | Get-Member TypeName: System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method System.Boolean Equals(Object obj) GetHashCode Method System.Int32 GetHashCode() GetType Method System.Type GetType() ToString Method System.String ToString() FirstName NoteProperty System.String FirstName=ディラン LastName NoteProperty System.String LastName=マッケイ get_FullName ScriptMethod System.Object get_FullName();
「FirstName」「LastName」プロパティと、「get_FullName」メソッドが定義されている。
やってる事は単に以下の関数を作って、それをパイプでつないで使っているだけ。
function New-Class([string]$name) { $obj = New-Object PSObject $obj } Set-Alias class New-Class filter Add-Property([string]$name, [object]$value) { $_ | Add-Member NoteProperty $name $value $_ } Set-Alias property Add-Property filter Add-Method([string]$name, [ScriptBlock]$method) { $_ | Add-Member ScriptMethod $name $method $_ } Set-Alias def Add-Method
特に意味は無いけど、何かに使えるかもしれない。