.net PowerShell、扩展方法和猴子补丁
是否可以在PowerShell中编写扩展方法?或者在现有类型(如运行时[string]live)上附加一个新方法?我不知道用扩展方法修补类型的方法。但是,当然可以通过add-member cmdlet修补对象.net PowerShell、扩展方法和猴子补丁,.net,powershell,extension-methods,monkeypatching,.net,Powershell,Extension Methods,Monkeypatching,是否可以在PowerShell中编写扩展方法?或者在现有类型(如运行时[string]live)上附加一个新方法?我不知道用扩展方法修补类型的方法。但是,当然可以通过add-member cmdlet修补对象 PS> $a = "foo" PS> $a = add-member -in $a -memberType ScriptMethod -name Bar -value { $this + "bar" } -passthru PS> $a.Foo() foobar 编辑解
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”:可以向运行时对象添加许多不同类型的值,包括方法、注释属性、代码方法等。。。有关完整列表,请参阅“获取帮助添加成员-完整”
- “-passthru”:获取刚刚添加了成员的对象,并将其沿管道向下推。如果没有此标志,分配将被分配到
,并且管道为空$a
- 赋值调用基本上是确保
现在具有您添加的方法$a
这方面的一个很好的例子可以在+1上找到。你能详细说明一下语法吗。$a=add成员看起来有点奇怪,-in和-passthru开关做什么?add成员还与管道PS>$a=“foo”PS>$a | add member-memberType ScriptMethod-name Bar-value{$this+“Bar”}PS>$a.foo()一起工作foobar@JaredPar:几个问题:“$A=addmember”似乎使“$A=$null”变为“$A=$null”。成员类型不应该是“ScriptProperty”并且调用“$a.Bar()”吗?我一定是弄错了什么,但我只是通过改变所有这些(PSV1)来实现的。嗯,廷德尔想要一个方法,而不是一个属性。非常正确。我错过了“-passthru”开关。。。然而,当新方法被命名为Bar()时,我仍然不明白调用Foo()有什么意义…:-?是的,这就是原始海报所寻找的答案。我确实偶然发现了这种方法。不确定。我希望在PowerShell和XML中保留尽可能多的内容。嗯,我想如果我有很多“mod”要做的话,我会用这个方法。