8

是否可以在 PowerShell 中编写扩展方法?或者在运行时在现有类型(如 [string] )之上添加一个新方法?

4

2 回答 2

10

如果您有要添加到特定类型的方法或属性,则可以通过 PowerShell 的自适应类型系统创建自定义类型扩展。

自定义类型扩展是一个 XML 文件,用于描述类型的属性或脚本方法,然后通过 Update-TypeData cmdlet 将其加载到 PowerShell 会话中。

可以在PowerShell 团队博客 - 讨厌添加成员?(PowerShell 的自适应类型系统救援)

于 2009-05-10T18:28:18.073 回答
9

我不知道用扩展方法修补类型的方法。但是当然可以通过 add-member cmdlet 修补对象

PS> $a = "foo"
PS> $a = add-member -in $a -memberType ScriptMethod -name Bar -value { $this + "bar" } -passthru
PS> $a.Foo()
foobar

编辑解释完全和完全可读的 PowerShell 语法:)

我喜欢 PowerShell,但它确实时不时会提出神秘的语法。

  • “-in”:这是 inputObject 的缩写,本质上表示向此添加成员
  • “-memberType”:您可以将许多不同类型的值添加到运行时对象,包括方法、注释属性、代码方法等……完整列表请参见“get-help add-member -full”
  • “-passthru”:获取刚刚添加成员的对象并将其推送到管道中。如果没有这个标志,分配将被分配和空管道到$a.
  • 赋值调用基本上是确保$a现在有你添加的方法
于 2009-05-08T17:38:34.167 回答