Domanda

Codice:

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.

Errore:

  

Method Invocation non è riuscito perché [Bar]   non contiene un metodo chiamato 'Foo'.

È stato utile?

Altri suggerimenti

Ho scritto qualcosa per PowerShell v2.0 che lo rende facile da chiamare interfacce esplicite in un modo naturale:

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

See:

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

Lo fa generando un modulo dinamico che thunk chiamate all'interfaccia. La soluzione è nello script PowerShell puro (senza brutte aggiuntivo di tipo trucchi).

-Oisin

Si può fare qualcosa di simile

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

Si ottiene ( riflessione representaion del) il membro del IFoo dall'oggetto Type e chiamare un sovraccarico Invoke . Peccato che si deve fare in questo modo, però. approccio simile per le proprietà in modo esplicito attuate ecc.

Se il metodo richiede argomenti, vanno nella @() matrice dopo la virgola nel codice precedente, naturalmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top