Вопрос Vb.net наследство
У меня есть вопрос о наследстве.
У меня есть куча классов, которые динамично отражаются в более крупном проекте во время выполнения. Все классы должны иметь стандартный набор методов и свойств для взаимодействия с этим большим проектом, и много накладных расходов кода аналогично между классами, поэтому у меня есть базовый класс, который обрабатывает свойства и методы, а затем дочерний класс, который заботится о конкретном коде для каждого блока через наследование.
Вот в чем проблема:
В базовом классе есть свойство, называемое "память", объявленное как объект. Это используется внутри дочернего класса для хранения данных, и он должен быть в состоянии содержать любой тип данных, поэтому у меня есть класс под названием "InternalMemory", в который преобразуется это свойство памяти. Это должно происходить одинаково для всех моих дочерних классов, поэтому я хотел бы обработать его в базовом классе, но тип, в который он преобразуется, должен быть определен в дочернем классе. Есть ли какой - нибудь способ сделать это?
Вот несколько упрощенных примеров кода.
Public MustInherit Class BlockOverhead Public Property Memory As Object Get Return BlockMemory End Get Set(value As Object) BlockMemory = value End Set End Property Protected BlockMemory As New Object Public Sub TryExecute() '========================================================================== 'Try to import the block memory '========================================================================== InternalBlockMem = TryCast(BlockMemory, Object.GetType(InternalBlockMem)) If IsNothing(InternalBlockMem) Then InternalBlockMem = New InternalMemory End If '========================================================================== 'Try to execute the block '========================================================================== Execute() '========================================================================== 'Save the block memory '========================================================================== BlockMemory = New Object BlockMemory = InternalBlockMem End Sub Protected MustOverride Sub Execute() End Class Public Class Magic1 Inherits BlockOverhead Public Class InternalMemory 'Create block's memory vars here. Public OutValue1 As Integer Public OutValue2 As Boolean End Class Protected Shadows InternalBlockMem As New InternalMemory Protected Overrides Sub Execute() 'Do some stuff to InternalblockMemory InternalBlockMem.OutValue1 = 0 InternalBlockMem.OutValue2 = True End Sub End Class Public Class Magic2 Inherits BlockOverhead Public Class InternalMemory 'Create block's memory vars here. Public Test As New List(Of String) Public Value As Decimal End Class Protected Shadows InternalBlockMem As New InternalMemory Protected Overrides Sub Execute() 'Do some stuff to InternalblockMemory InternalBlockMem.Test.Clear() InternalBlockMem.Test.Add(“Stuff”) InternalBlockMem.Value = InternalBlockMem.Value + 1 End Sub End Class
Что я уже пробовал:
Я пробовал затенение, но форматирование в базовом классе изменило экземпляр базового класса переменной.
Пробовал Гугл в течение нескольких часов. Там тоже не повезло.