Pregunta

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.

Error:

  

Método de invocación fracasó porque [bar]   no contiene un método llamado 'Foo'.

¿Fue útil?

Otros consejos

Me escribió algo para PowerShell v2.0 que hace que sea fácil llamar a las interfaces explícitas de una manera natural:

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

Ver:

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

Esto se logra mediante la generación de un módulo dinámico que thunks llamadas a la interfaz. La solución está en escritura PowerShell puro (sin trucos de tipo add desagradables).

-Oisin

Se puede hacer algo como

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

Se obtiene ( reflexión REPRESENTACIÓN de) el miembro de IFoo del objeto Type y llamar a un sobrecarga Invoke . Es una lástima que uno tiene que hacerlo de esa manera, sin embargo. enfoque similar para las características implementadas de manera explícita, etc.

Si el método tiene argumentos, que van en la gama @() después de la coma en el código anterior, por supuesto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top