PowerShell에서 명시 적으로 구현 된 인터페이스 메소드를 어떻게 호출 할 수 있습니까?

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

문제

암호:

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 v2.0을 위해 무언가를 자연스러운 방식으로 명시적인 인터페이스를 쉽게 호출 할 수 있도록 썼습니다.

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

보다:

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

펑크가 인터페이스로 호출하는 동적 모듈을 생성하여이를 수행합니다. 이 솔루션은 순수한 PowerShell 스크립트 (불쾌한 추가 유형 트릭 없음)에 있습니다.

-이신

당신은 같은 일을 할 수 있습니다

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

당신은 얻습니다 ( 반사 ) 회원의 대표 IFoo ~로부터 Type 개체하고 전화하십시오 Invoke 초과 적재. 그래도 너무 나쁜 사람은 그렇게해야합니다. 명시 적으로 구현 된 속성 등에 대한 유사한 접근법

메소드가 인수를 받으면 배열에 들어갑니다. @() 물론 위의 코드에서 쉼표 후.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top