PowerShell,扩展方法和Monkey补丁

Bud*_*Joe 8 .net powershell extension-methods monkeypatching

是否可以在PowerShell中编写扩展方法?或者在运行时直播现有类型的新方法,如[string] live?

Jar*_*Par 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
Run Code Online (Sandbox Code Playgroud)

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

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

  • "-in":这是inputObject的缩写,实质上是说添加成员
  • "-memberType":您可以向运行时对象添加许多不同类型的值,包括方法,注释属性,代码方法等...有关完整列表,请参阅"get-help add-member -full"
  • "-passthru":取出刚加入成员的对象并将其推入管道.如果没有此标志,则分配将分配并清空管道$a.
  • 赋值调用基本上确保$a现在具有您添加的方法


Ste*_*ski 9

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

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

可以在PowerShell团队博客上找到一个很好的例子- 仇恨添加成员?(PowerShell的自适应型系统救援)