如何从 PowerShell 调用显式实现的接口方法?
-
09-09-2019 - |
题
代码:
add-type @"
public interface IFoo
{
void Foo();
}
public class Bar : IFoo
{
void IFoo.Foo()
{
}
}
"@ -Language Csharp
$bar = New-Object Bar
($bar -as [IFoo]).Foo() # ERROR.
错误:
方法调用失败了,因为[bar]不包含名为“ foo”的方法。
其他提示
我写的PowerShell 2.0的东西,可以很容易地调用明确的接口以自然的方式:
PS> $foo = get-interface $bar ([ifoo])
PS> $foo.Foo()
请参阅:
http://www.nivot.org/2009/03/28 /PowerShell20CTP3ModulesInPracticeClosures.aspx
有通过产生的thunk到接口调用动态模块执行此操作。解决的办法是在纯的powershell脚本(没有讨厌的附加型花样)。
-Oisin
你可以做类似的事情
$bar = New-Object Bar
[IFoo].GetMethod("Foo").Invoke($bar, @())
你得到( 反射 的代表)的成员 IFoo
来自 Type
对象并调用 Invoke
超载. 。但不幸的是,人们必须这样做。显式实现的属性等的类似方法。
如果该方法接受参数,它们就会进入数组 @()
当然,在上面代码中的逗号之后。
不隶属于 StackOverflow