约 1979 字

约 10 分钟

#类与枚举

#简介

PowerShell 5.0 起支持 class,适合描述结构固定的对象。类支持类型约束、构造函数、继承和静态成员,PowerShell 7.x 在 Windows、Linux 和 macOS 上均可使用。

#定义类

类由属性、方法和构造函数组成,实例方法用 $this 引用当前对象:

class Person {
    [string]$Name
    [int]$Age

    Person([string]$name, [int]$age) {
        $this.Name = $name
        $this.Age = $age
    }

    [string] Greet() { return "Hello, $($this.Name)" }
}

[Person]::new('Alice', 30).Greet()

属性前的 [string]、[int] 是类型约束。方法返回值类型写在方法名前,没有返回值时可以写 [void]。

#构造函数与继承

构造函数与类同名,可以重载。子类使用 : 继承,并通过 : base(...) 调用父类构造函数:

class Animal {
    [string]$Name
    Animal([string]$name) { $this.Name = $name }
    [string] Speak() { return '...' }
}

class Dog : Animal {
    Dog([string]$name) : base($name) {}
    [string] Speak() { return "Woof, $($this.Name)" }
}

[Dog]::new('Rex').Speak()

PowerShell 类只支持单继承。构造函数可以重载;未定义时使用默认无参构造函数。

#枚举

enum 定义一组命名常量,成员默认从 0 开始递增,也可以显式赋值:

enum Color {
    Red
    Green = 5
    Blue
}

[Color]::Red
[Color]5
[int][Color]::Blue

[Color]5 得到 Green,[int][Color]::Blue 得到 6。

#静态成员与 hidden

static 成员属于类型本身,通过 :: 访问。hidden 用于从默认输出、Get-Member 和自动补全中隐藏成员,但它不是访问控制或安全边界:

class Counter {
    hidden [string]$Token
    static [int]$Count = 0

    Counter([string]$token) { $this.Token = $token }

    static [int] Next() {
        [Counter]::Count = [Counter]::Count + 1
        return [Counter]::Count
    }

    [string] Reveal() { return $this.Token }
}

[Counter]::Next()
[Counter]::new('abc').Reveal()

#注意事项

  • 类定义建议放在脚本或模块顶层,避免在函数内部定义。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2