代码:

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 超载. 。但不幸的是,人们必须这样做。显式实现的属性等的类似方法。

如果该方法接受参数,它们就会进入数组 @() 当然,在上面代码中的逗号之后。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top