#类与枚举
#简介
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()
#注意事项
- 类定义建议放在脚本或模块顶层,避免在函数内部定义。