Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net PowerShell、扩展方法和猴子补丁_.net_Powershell_Extension Methods_Monkeypatching - Fatal编程技术网

.net PowerShell、扩展方法和猴子补丁

.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 编辑解

是否可以在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
编辑解释完全可读的PowerShell语法:)

我喜欢PowerShell,但它确实会不时出现一些神秘的语法

  • “-in”:这是inputObject的缩写,本质上说是向其添加成员
  • “-memberType”:可以向运行时对象添加许多不同类型的值,包括方法、注释属性、代码方法等。。。有关完整列表,请参阅“获取帮助添加成员-完整”
  • “-passthru”:获取刚刚添加了成员的对象,并将其沿管道向下推。如果没有此标志,分配将被分配到
    $a
    ,并且管道为空
  • 赋值调用基本上是确保
    $a
    现在具有您添加的方法

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

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


这方面的一个很好的例子可以在

+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”要做的话,我会用这个方法。