Home > Windows にまつわる e.t.c.

超簡単な PowerShell Class の使い方(その3/static)


その1その2で PowerShell class の超基本的な事を説明してきたので、少し高度(?)なことを説明します。

今回説明するのが「static」指定子です。

class で static を使うと静的な存在になり、今まで説明した事とちょっと違った動きをするようになります。

(文中で、「内部データ/データ」と「プロパティ」の2つの言葉が出てきますが、文脈によって使い分けているだけで同じ意味です)

 

static メソッド

メソッドに static 指定子を付けると、インスタンス化しなくても使用できるメソッドになります。

[D:\temp\test21.ps1]

class TestClass21{
    # 16進に変換するメソッド
    static [string] ToHex ( [int] $Indata ){
        return $Indata.tostring("x")
    }
}

# 静的メソッドを実行する
[TestClass21]::ToHex(255)

 

これを実行するとこのようになります。

PS D:\> D:\temp\test21.ps1
ff
PS D:\>

 

.NET Framework を使う時に似てますね。

 

static 変数

変数に static 指定子を付けると、インスタンス化されたオブジェクト間で共有される変数になります。

[D:\temp\test22.ps1]

class TestClass22{
           [int] $Data      # 通常の内部データ
    static [int] $stData    # static な内部データ

    # 通常変数へのの Add メソッド
    [int] Add ( [int] $Indata ){
        $this.Data += $Indata
        return $this.Data
    }

    # static 変数への Add メソッド
    [int] StaticAdd ( [int] $Indata ){
        [TestClass22]::stData += $Indata
        return [TestClass22]::stData
    }
}

echo "インスタンス化"
$TestObjectA = New-Object TestClass22

echo "通常内部データを操作するメソッド実行(10)"
$TestObjectA.Add(10)

echo "static な内部データを操作するメソッド実行(15)"
$TestObjectA.StaticAdd(15)

echo ""

echo "もう一つインスタンス化"
$TestObjectB = New-Object TestClass22

echo "通常内部データを操作するメソッド実行(10)"
$TestObjectB.Add(10)

echo "static な内部データを操作するメソッド実行(15)"
$TestObjectB.StaticAdd(15)

 

PS D:\> D:\temp\test22.ps1
インスタンス化
通常内部データを操作するメソッド実行(10)
10
static な内部データを操作するメソッド実行(15)
15

もう一つインスタンス化
通常内部データを操作するメソッド実行(10)
10
static な内部データを操作するメソッド実行(15)
30
PS D:\>

 

$TestObjectA で更新された static 変数が、$TestObjectB に共有されているのがわかりますね。

static 内部変数は、通常内部変数と同様に class 外部からアクセスすることが可能です。

[TestClass22]::stData

 

どう使うかはアイディア次第ってところでしょうか。

 

関連情報

超簡単な PowerShell Class の使い方(その1)
http://www.vwnet.jp/Windows/PowerShell/2017082001/PSv5Class01.htm

超簡単な PowerShell Class の使い方(その2/オーバーロード)
http://www.vwnet.jp/Windows/PowerShell/2017082101/PSv5Class02.htm

超簡単な PowerShell Class の使い方(その4/継承)
http://www.vwnet.jp/Windows/PowerShell/2017082301/PSv5Class04.htm

超簡単な PowerShell Class の使い方(その5/スコープ)
http://www.vwnet.jp/Windows/PowerShell/2017082302/PSv5Class05.htm

超簡単な PowerShell Class の使い方(その6/まとめ)
http://www.vwnet.jp/Windows/PowerShell/2017082401/PSv5Class06.htm

PowerShell Class
http://www.vwnet.jp/Windows/etc.asp#PowerShell_Class

PowerShell クラスを使用したカスタム型の作成Creating Custom Types using PowerShell Classes | Microsoft Docs
https://docs.microsoft.com/ja-jp/powershell/scripting/windows-powershell/wmf/whats-new/class-overview?WT.mc_id=WD-MVP-36880

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.