PowerShell: [string]〇〇と[string]::〇〇の違い
PowerShellのスクリプト内で [string]〇〇や[string]::〇〇といった表記を見かけることがあります。 一見似ていますが、意味が全く違うので PowerShellに慣れていない最初の頃は注意が必要です。
結論から言うと[string]〇〇はデータ型の指定や変換で、 [string]::〇〇はスタティックメンバの呼び出しです。
表記 | 意味 |
---|---|
[string]〇〇 | データ型の指定・変換 |
[string]::〇〇 | スタティックメンバの呼び出し |
具体例として[string]を上げていますが、 角括弧[]の中にはstringだけでなく、 intやdatetimeなどの型エイリアス名か型名が入ります。
型エイリアス名 | 型名 |
---|---|
string | System.String |
int | System.Int32 |
datetime | System.DateTime |
[string]〇〇の意味
この表記はデータ型の指定・変換という意味です。
明示的にデータの型を指定・変更したい場合に使います。
〇〇の部分にはデータ(リテラルや変数)を記述します。
具体例は次の通りです。
[string]$s = "100" # string型を指定 $n = 10 [string]$10 # 数値をstring型に変換 [int]"100" # 文字列をint型に変換
この表記は「データ型の指定」よりも、 「データ型の変換」で使用するケースが多いと思います。
[string]::〇〇の意味
この表記はクラスのメソッドかプロパティを呼び出します。
〇〇の部分にはスタティックメンバ
(スタティックメソッドかスタティックプロパティ)が入ります。
スタティックは「静的な」という意味です。
::はスタティックメンバを呼び出すための演算子です。
# StringクラスのFormatメソッドを実行 [string]::Format() # # DateTimeクラスのNowプロパティを参照 [datetime]::Now # 現在の日時
スタティックメンバを呼び出すことで、 インスタンスを作成することなく クラスのメソッドやプロパティを使用できます。