PowerShellの「::」(コロン二つ)の意味

PowerShellMicrosoft

「::」はPowerShellでスタティックなメンバにアクセスする場合に使用します。

スタティックなメンバとは何か?
インスタンスを生成しなくても、アクセスができるメソッドやプロパティのことです。

スポンサーリンク

「::」(コロン二つ)はスタティックなメンバやメソッドにアクセスする際の演算子

例を説明する前にもう少しスタティックなメソッドについて理解を深めてもらうために説明していきます。

以下のコードを実行すると確認できますが、ConvertクラスのToStringを使おうとしているのですが、「()」がないのでPowerShellがこいつ使い方分かってねーなってことでToStringはこんな使い方があるよーと教えてくれます。それが結果部分に記載されているメソッドの一覧である。

ここで見てほしいのが最初に「static」と記載されていることに注目してほしい。
これがスタティックメソッドと呼ばれるものです。

[System.Convert]::ToString

#上記の実行結果、ToStringの使い方を教えてくれる
OverloadDefinitions
-------------------
static string ToString(System.Object value)
static string ToString(System.Object value, System.IFormatProvider provider)
static string ToString(bool value)
static string ToString(bool value, System.IFormatProvider provider)
static string ToString(char value)
static string ToString(char value, System.IFormatProvider provider)
static string ToString(sbyte value)
static string ToString(sbyte value, System.IFormatProvider provider)
static string ToString(byte value)
static string ToString(byte value, System.IFormatProvider provider)
static string ToString(short value)
static string ToString(short value, System.IFormatProvider provider)
static string ToString(ushort value)
static string ToString(ushort value, System.IFormatProvider provider)
static string ToString(int value)
static string ToString(int value, System.IFormatProvider provider)
static string ToString(uint value)
static string ToString(uint value, System.IFormatProvider provider)
static string ToString(long value)
static string ToString(long value, System.IFormatProvider provider)
static string ToString(ulong value)
static string ToString(ulong value, System.IFormatProvider provider)
static string ToString(float value)
static string ToString(float value, System.IFormatProvider provider)
static string ToString(double value)
static string ToString(double value, System.IFormatProvider provider)
static string ToString(decimal value)
static string ToString(decimal value, System.IFormatProvider provider)
static string ToString(datetime value)
static string ToString(datetime value, System.IFormatProvider provider)
static string ToString(string value)
static string ToString(string value, System.IFormatProvider provider)
static string ToString(byte value, int toBase)
static string ToString(short value, int toBase)
static string ToString(int value, int toBase)
static string ToString(long value, int toBase)

つまりこれにアクセスするためにはインスタンス化が必要ないということです。
そして以下のように実行できます。(このメソッドは第一引数を二進数に変えてストリングにするメソッドです。)

[System.Convert]::ToString(12,2)

#実行結果 2進数になって表示される
1100

もう少し、スタティックなメソッドについて理解を深めましょう。

例えば以下のようにIDでMessageクラスを作り、メソッドを取得するgetMessageByIDというメソッドを作成します。getMessageByIDはスタティックではありません。

class Message {
    [String]$ID;
    [string]$Content;
    $Data;

    Message() {
		$ID = "ErrorMessage"
		$Content = "エラーです"
    }
    [string]getMessageByID([string]$ID) {
        if (0 -eq $this.Data.Count ) {
            return [string]::Empty
        }
        return $this.Data[$ID];
    }
}

1行目でMessageクラスのインスタンスを作成し、2行目でgetMessageByIDメソッドをよんでいますが、この場合はメソッドを呼ぶ際は「::」ではなく、「.」で呼び出していることに注目してください。

$Message =  [Message]::new()
$LogMessage = $Message.getMessageByID("GET_AAD_GROUP_ERROR")

要するにスタティックなメソッドと普通のメソッドでは呼び出す際の構文が違うよって話でした。

まとめ

スタティックに関しても、別のところで説明できればと考えています。
今回の説明で少しはイメージをつかんでいただけたらと思います。

フリーランスを目指すなら【テックパートナーズカレッジ】

未経験者向けWEBスクール【SHElikes】

コメント

タイトルとURLをコピーしました