Pergunta

Código:

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.

Erro:

Método invocação falhou porque [Bar] não contém um método chamado 'Foo'.

Outras dicas

Eu escrevi algo para PowerShell v2.0 que torna mais fácil para chamar as interfaces explícitas de uma forma natural:

PS> $foo = get-interface $bar ([ifoo])
PS> $foo.Foo()

Veja:

http://www.nivot.org/2009/03/28 /PowerShell20CTP3ModulesInPracticeClosures.aspx

Ele faz isso através da geração de um módulo dinâmico que thunks chamadas para a interface. A solução está no script do PowerShell puro (não do tipo add desagradáveis ??truques).

-Oisin

Você pode fazer algo como

$bar = New-Object Bar
[IFoo].GetMethod("Foo").Invoke($bar, @())

Você começa (o reflexão representaion de) o membro do IFoo do objeto Type e ligar para um Invoke sobrecarga . Pena que um tem que fazê-lo dessa forma, embora. abordagem semelhante para propriedades explicitamente implementados etc.

Se o método leva argumentos, eles vão na @() matriz após a vírgula no código acima, é claro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top