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

超簡単な PowerShell Class の使い方(その5/スコープ)


その1 ~ その4 の説明で、PowerShell Class の基本的な事について説明はほぼ終わりなので、今回はスコープについて整理をしておきます。

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

 

アクセス制限

これを書いている PowerSell 5 のクラスでは実装されていないのですが、今後実装されるであろう大切なことについてまずは説明しておきます。

オブジェクト指向言語では、プロパティやメソッドに対し Class の外からのアクセス制限する機能があります。

これは、Class の独立性を高めるために内部だけで使用したいデータやメソッドを隠蔽したり、プロパティして値だけは読み取って良いよと class の外からは Read Only でアクセスできるようにする機能です。

static はアクセス制限とは少し毛色が違いますが、ここで併せて整理しましょう。

アクセス制限 プロパティ メソッド PowerShell 5 でのサポート
public Class 外から RW 可能 Class 外から使用可能
protected Class 内と継承先だけ RW 可能, クラス外からは RO のみ Class 内と継承先だけ使用可能 ×
private Class 内 だけ RW 可能 Class 内だけ使用可能 ×
static インスタンス間共有 インスタンス化しなくても使用可能

 

このように、PowerShell 5 では public しかアクセス制限が実装されていないので、class の外部からのプロパティやメソッドへのアクセスを術が現状ありません。

今後のバージョンでサポートされると思います。

 

スコープ

クラスを含めた PowerShell の標準スコープはこんな感じです。

# スクリプト スコープ変数
[int] $ScriptData

# この定義をしてもスクリプトスコープにはならない
# [TestClass] $TestClassObject01
# [TestClass] $Script:TestClassObject02

class TestClass{
    # クラス スコープ プロパティ
    # (public しかサポートしていない PS 5 の仕様のため、実際はスクリプト スコープ プロパティ)
    [int] $ClassData

    # 静的プロパティ
    static [int] $StaticData

    # クラス スコープ メソッド
    # (public しかサポートしていない PS 5 の仕様のため、実際はスクリプト スコープ メソッド)
    [int] hoge(){
        # メソッド スコープ 変数
        [int] $MethodData = 3
        return $MethodData
    }

    # 静的メソッド
    static [string] ToHex ( [int] $Indata ){
        return $Indata.tostring("x")
    }
}

function TestFunction(){
    # ファンクション スコープ 変数
    [int] $FunctionData

    # スクリプト スコープ 変数
    [int] $Script:ScriptData

    # ファンクション スコープ オブジェクト
    $FunctionScopeTestObject = New-Object TestClass

    # スクリプト スコープ オブジェクト
    $Script:ScriptScopeTestObject = New-Object TestClass
}

# スクリプト スコープ オブジェクト
ScriptScopeTestObject2 = New-Object TestClass

 

関連情報

超簡単な 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 の使い方(その3/static)
http://www.vwnet.jp/Windows/PowerShell/2017082201/PSv5Class03.htm

超簡単な PowerShell Class の使い方(その4/継承)
http://www.vwnet.jp/Windows/PowerShell/2017082301/PSv5Class04.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/wmf/5.0/class_overview

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.