كيف يمكنني الاتصال بطريقة واجهة تنفذ بشكل صريح من 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.

خطأ:

فشل استدعاء الأسلوب لأن [شريط] لا يحتوي على طريقة تسمى "foo".

هل كانت مفيدة؟

نصائح أخرى

كتبت شيئا ل PowerShell V2.0 مما يجعل من السهل استدعاء واجهات صريحة بطريقة طبيعية:

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

يرى:

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

يقوم بذلك عن طريق إنشاء وحدة نمطية ديناميكية تدعو إلى الواجهة. الحل هو في البرنامج النصي PowerShell النقي (لا حيل إضافات سيئة).

-

يمكنك أن تفعل شيئا مثل

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

تحصل عليه ( انعكاس امتنان) عضو IFoo من Type كائن واستدعاء Invoke الزائد. وبعد سيء للغاية يجب أن يفعل ذلك بهذه الطريقة. نهج مماثل للخصائص المنفذة بشكل صريح وما إلى ذلك.

إذا كانت الطريقة تأخذ الحجج، فإنها تذهب في الصفيف @() بعد الفاصلة في التعليمات البرمجية أعلاه، بالطبع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top