كيف يمكنني الاتصال بطريقة واجهة تنفذ بشكل صريح من PowerShell؟
-
09-09-2019 - |
سؤال
رمز:
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
الزائد. وبعد سيء للغاية يجب أن يفعل ذلك بهذه الطريقة. نهج مماثل للخصائص المنفذة بشكل صريح وما إلى ذلك.
إذا كانت الطريقة تأخذ الحجج، فإنها تذهب في الصفيف @()
بعد الفاصلة في التعليمات البرمجية أعلاه، بالطبع.
لا تنتمي إلى StackOverflow