概要
前回の 新しいクラスを作る(1)でご紹介した New-Class.ps1を使って、フィールドを持つクラスを作ってみます。
フィールドの実装
新しいクラス「Class1」を作成し、string 型のパブリックフィールド「Message」を実装してみましょう。
PS> New-Class Class1 {Field public string Message} | ||
NameSpace | Name | BaseType |
———– | —- | ———- |
Class1 | System.Object |
オブジェクトを作って Get-Member に渡してみます。
PS> $o = New-Object Class1 | ||
PS> $o | Get-Member | ||
TypeName: Class1 | ||
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() |
Message | Property | System.String Message {get;set;} |
確かに「Message」というメンバが増えています。「Property」と表示されていますが、これは PowerShell での表示上の問題です。別の方法で確かめてみましょう。
PS> [Class1].GetProperties()
PS> [Class1].GetFields()
System.String Message
PS> [Class1].GetFields()
System.String Message
GetProperties() では何も表示されませんが、GetFields() で「System.String Message」と表示され、確かにフィールドであることがわかります。 実際に使ってみましょう。
PS> $o.Message = 'Hello World!'
PS> $o.Message
Hello World!
PS> $o.Message
Hello World!
Field コマンドの解説と静的メンバの実装
クラスメンバは、スクリプトブロックの中にコマンドを記述することで定義します。上記では、「Field public string Message」というコマンドを与え、フィールドを実装しました。まず、「Field」というのが、「フィールドを作成する」というコマンドです。続く「public」「string」「Message」が、その引数で、それぞれ「属性」「型」「名前」をあらわします。 属性は、「public」の他に、「private」「static」が使えます。属性を 2 つ以上使いたい場合には、「(‘public’, ‘static’)」のように、文字列の配列にして渡します。 それでは、Message フィールドを静的フィールドにしてみましょう。
PS> New-Class Class2 {Field ('public', 'static') string Message} | ||
NameSpace | Name | BaseType |
———– | —- | ———- |
Class2 | System.Object |
試してみます。
PS> [Class2]::Message = 'Hello World!'
PS> [Class2]::Message
Hello World!
PS> [Class2]::Message
Hello World!
これでフィールドが作れるようになりました。