PowerShell,扩展方法和Monkey补丁

时间:2009-05-08 17:20:47

标签: .net powershell extension-methods monkeypatching

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

2 个答案:

答案 0 :(得分: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的缩写,实际上是将add member添加到此
  • “ -​​ memberType”:您可以向运行时对象添加许多不同类型的值,包括方法,注释属性,代码方法等...有关完整列表,请参阅“get-help add-member -full”
  • “ -​​ passthru”:取刚刚添加成员的对象并将其向下推入管道。如果没有此标志,则分配将为$a分配并清空管道。
  • 分配调用基本上确保$a现在具有您添加的方法

答案 1 :(得分:9)

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

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

可以在PowerShell Team Blog - Hate Add-Member? (PowerShell's Adaptive Type System to the Rescue)

上找到一个很好的例子