2007/11/30 金曜日

新しいクラスを作る(4) ― プロパティ

Filed under: Powershell — flamework @ 12:02:34

プロパティの定義

プロパティは、次のように定義します。

Property <型> <名前> <実装>

<型>は、Type で、<名前> は、string、<実装>は ScriptBlock です。<実装> の中には Get-Value と Set-Value を定義します。$args[0] には、オブジェクトのインスタンスが格納されており、Set-Value 中の $args[1] には、プロパティに設定すべき値が格納されています。次の用例をご覧ください。

PS> New-Class Class7 {
>>     Field private string FMessage
>>     Property string Message {
>>         Get-Value {
>>             Get-PrivateField $args[0] FMessage
>>         }
>>         Set-Value {
>>             Set-PrivateField $args[0] FMessage $args[1]
>>         }
>>     }
>> }
>>
NameSpace Name BaseType
--------- ---- --------
  Class7 System.Object
 
PS> $o = New-Object Class7
PS> $o.Message = 'Hello World!'
PS> $o.Message
Hello World!

Set-Value が無い場合、プロパティは読み取り専用になります。

PS> New-Class Class8 {
>>     Property string Message {
>>         Get-Value { '読み取り専用!' }
>>     }
>> }
>>
NameSpace Name BaseType
--------- ---- --------
  Class8 System.Object

PS> $o = New-Object Class8
PS> $o.Message = 'Hello World!'
"Message" は ReadOnly のプロパティです。 発生場所 行:1 文字:4 + $o.M <<<< essage = 'Hello World!'
PS> $o.Message
読み取り専用!

ダウンロード

上記用例を実行するには、以下のスクリプトが必要です。

2007/11/29 木曜日

プライベートメンバにアクセスする

Filed under: Powershell — flamework @ 12:15:38

概要

新しいクラスを作る(3) ― コンストラクタにて、プライベートフィールドへのアクセスが冗長になることを書きました。色々と考えたのですが、他の場面で使うこともあるかもしれないと思い、外部スクリプトにすることにしました。

ダウンロード

用例

$o に「FMessage」というプライベートフィールドを持つオブジェクトが入っている時、Get-PrivateField および Set-PrivateField は、次のように使います。

PS> Set-PrivateField $o 'FMessage' 'Hello World!'
PS> Get-PrivateField $o 'FMessage'
Hello World!

また、$o が、「Add」という int 型の引数を 2 つ取るメソッドを持っている時、Invoke-PrivateMethod は、次のように使います。

PS> Invoke-PrivateMethod $o 'Add' (3, 5)
8

これらは、静的フィールドおよび静的メソッドに対しても使うことができます。

« 前ページへ次ページへ »

Copyright © flamework.net 2008.