سؤال

أنا أعمل في 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).مع التعليمات البرمجية الخاصة بك ، صراحة إنشاء اتصال بين هذين.

نصائح أخرى

لأنك تنفيذ طفلك الفئة التي لديك إلى إعادة ذلك.وأعتقد إذا كنت فقط ترث من حالة قاعدة ، والتي يتم تنفيذها على أي حال, لن يكون لديك إذا كنت لا تحتاج إليها.

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