لماذا ؟ Redeclare الأمور إلى تنفيذ واجهات?!في VB.NET
-
05-07-2019 - |
سؤال
أنا أعمل في VB.NET v2
لدي واجهة IMyInterface و هذه واجهة تنفذ الطريقة MyMethod.
أنا كائن MyObjectBase.هذا الكائن يحتوي على(نفس) طريقة MyMethod.
1) إذا كنت تفعل MyObject Inherits MyObjectBase Implements IMyInterface
هل أنا بحاجة إلى إعادة تعريف? (الظل تجاوز) MyMethod
في MyObject
الفصل ؟
2) ماذا الآن إذا بدلا من ذلك MyMethod
طريقة لدي MyEvent
الحدث?
شكرا
المحلول
في VB.NET تحتاج إلى يدويا ربط الخاص بك واجهة العقد مع تطبيقات.إلقاء نظرة على المثال التالي:
Interface MyInterface
Sub Foo()
End Interface
Class TestClass
Implements MyInterface
Public Sub Test() Implements MyInterface.Foo
Console.WriteLine("Test")
End Sub
Public Sub Foo()
Console.WriteLine("Foo")
End Sub
End Class
ثم إلقاء نظرة على التعليمات البرمجية التالية و انتاجها:
Dim x As New TestClass()
x.Foo() ' Output: Foo '
Dim y As MyInterface = x
y.Foo() ' Output: Test '
هذا له ميزة أنه تنفيذ واجهة لا تقييد في تسمية وظيفة الخاص بك كما تريد.العيب هو أن عليك أن ربط واضح الخاص بك أساليب الفئة الخاصة بك مع واجهة الإعلانات باستخدام Implements
الكلمات الرئيسية.
كثيرا عن تفسير.الآن اسمحوا لي أن الحصول على المشكلة:منذ كنت لا يمكن أن تجعل Button
تنفيذ IVisibleChanged ، يمكنك أن تفعل شيئا مثل هذا:
Private Event MyVisibleChanged() Implements IVisibleChanged.VisibleChanged
Private Sub RethrowVisibleChanged() Handles MyBase.VisibleChanged
RaiseEvent MyVisibleChanged()
End Sub
MyBase
هو VB.NET الكلمة اشارة الى الفائقة.وبالمثل ، في حالة MyMethod
, يمكنك أن تفعل
Private Sub MyInterfaceMethod() Implements IMyInterface.Method
MyBase.Method()
End Sub
هذا قد يبدو وكأنه لا لزوم لها ، ولكن في الطريق ، فمن المنطقي: Button.VisibleChanged
و IVisibleChanged.VisibleChanged
قد تكون الأحداث مع اثنين مختلفة تماما دلالات الذي يحدث لمجرد أن يكون نفس الاسم (بعد كل شيء Button
لا تنفيذ IVisibleChanged
).مع التعليمات البرمجية الخاصة بك ، صراحة إنشاء اتصال بين هذين.
نصائح أخرى
لأنك تنفيذ طفلك الفئة التي لديك إلى إعادة ذلك.وأعتقد إذا كنت فقط ترث من حالة قاعدة ، والتي يتم تنفيذها على أي حال, لن يكون لديك إذا كنت لا تحتاج إليها.