You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PowerShell数组自身无OutMsg方法却可调用该成员方法?

PowerShell数组调用成员方法的疑问解答

示例代码

class MyClass { }
class MyClass1 : MyClass {
    [void] OutMsg([string] $Str) {
        Write-Host -Object "MyClass1: $Str"
    }
}
class MyClass2 : MyClass {
    [void] OutMsg([string] $Str) {
        Write-Host -Object "MyClass2: $Str"
    }
}
[MyClass[]] $ClassArray = @([MyClass1]::new(), [MyClass2]::new())
$ClassArray.OutMsg('TestString')

执行输出

MyClass1: TestString
MyClass2: TestString

验证操作

执行以下命令会发现数组对象本身并不具备OutMsg方法:

Get-Member -InputObject $ClassArray

疑问解答

这是PowerShell的**成员枚举(Member Enumeration)**特性在起作用。

当你对集合(比如数组)调用某个方法或访问属性时,如果集合自身没有这个成员,PowerShell会自动遍历集合里的每个元素,对每个元素执行该方法调用或属性访问,最终完成你想要的操作。

放到你的场景里:

  • $ClassArray是[MyClass[]]类型的数组,数组对象本身确实没有OutMsg方法
  • 但PowerShell检测到这一点后,自动把方法调用“分发”给了数组中的每一个元素
  • 数组里的MyClass1和MyClass2实例都拥有OutMsg方法,所以各自执行了对应的逻辑,就得到了你看到的输出结果

这个特性是为了简化集合操作,不用你手动写循环去遍历元素调用方法。需要注意的是,如果集合里的元素没有这个成员,调用时会直接报错。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:07:19