У меня есть класс, который, как я понял, не всегда будет корректно создаваться, и, как быстрое решение, я решил подклассировать его и скрыть несколько методов, чтобы программа могла продолжать работать без взрыва.Когда я запускаю программное обеспечение, вызовы методов разрешают реализации базы, а не подкласс.Я использую VB.NET с .NET 2.0.Вот пример того, что я пытаюсь сделать:
Public Class SuperClass
Public Sub New ()
Dim type As Type = GetType(SubClass)
If (Me.GetType() is type) Then
//nothing
Else
//build real object
EndIf
End Sub
Private Shared _Instance As SuperClass
Public Shared ReadOnly Property Instance() As SuperClass
Get
If (_Instance Is Nothing) Then
Try
_Instance = New SuperClass()
Catch ex As Exception
Dim result As DialogResult = MessageBox.Show(text, caption, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information)
If (result = DialogResult.Retry) Then
_Instance = New SuperClass()
//this will probably cause problems of its own, but i'll cross that bridge later...
Else
_Instance = New SubClass()
End If
End Try
End If
Return _Instance
End Get
End Property
Public Overridable Function MyFunction() As Integer
Dim somethingReasonable As Integer //do something for real
Return somethingReasonable
End Function
End Class
Public Class SubClass
Inherits SuperClass
Public Sub New()
//doesn't do what cause the exception in the first place
End Sub
Public Shadows Function MyFunction() As Integer
//Do something safe
Return -1
End Function
End Class
Я не уверен, почему базовый класс вызывается во время выполнения.Когда я проверяю объект в отладчике, это явно тип SubClass, но вызываются методы SuperClass.Доступ к объекту осуществляется через свойство экземпляра.
Я уверен, что делаю что-то не так или делаю неправильное предположение, но не могу понять, что именно.
Спасибо, Брайан