Всем привет,
В чем проблема следующего кода?
Public Class Form1
Class S
Public Sub MD()
Debug.Print("S.MD")
End Sub
Public Sub MU()
Debug.Print("S.MU")
End Sub
End Class
Class B : Inherits S
Public Overloads Sub MD()
Debug.Print("B.MD")
End Sub
Public Overloads Sub MU()
Debug.Print("B.MU")
End Sub
End Class
Public V1 As New S
Public V2 As New S
Public V3 As New B
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
V1 = V2
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
V1 = V3
End Sub
Private Sub Form1_MouseDown1(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
V1.MD()
End Sub
End Class
Почему у меня вызывается метод S.MD, а не B.MD если переменна V1 инициализирована значением V3
1. Во-первых, в базовом классе должно быть
Public Overridable Sub MD()
и
Public Overridable Sub MU()
а в классе наследнике должно быть соответственно
Public Overrides Sub MD()
и
Public Overrides Sub MU()
2. А во вторых во-избежание возможных проблем с последовательностью вызова процедур, стоит тестируемый код поместить в одну процедуру