Comment puis-je appeler la méthode d'interface explicitement mis en œuvre à partir de PowerShell?

StackOverflow https://stackoverflow.com/questions/746014

Question

Code:

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.

Erreur:

  

invocation méthode a échoué parce que [Bar]   ne contient pas une méthode appelée « Foo ».

Était-ce utile?

Autres conseils

J'ai écrit quelque chose pour v2.0 PowerShell qui le rend facile d'appeler des interfaces explicites de façon naturelle:

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

Voir:

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

Elle le fait en générant un module dynamique qui Thunks appels à l'interface. La solution est dans le script Powershell pur (pas de tours add type méchant).

-Oisin

Vous pouvez faire quelque chose comme

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

Vous obtenez ( réflexion representaion de) membre de IFoo de l'objet Type et appeler un Invoke surcharge . Dommage que l'on doit le faire de cette façon, cependant. Une approche similaire pour les propriétés explicitement mises en œuvre, etc.

Si la méthode prend des arguments, ils vont dans le @() tableau après la virgule dans le code ci-dessus, bien sûr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top