Предотвращение исключения StackruException в определении свойств в.Net
В моем классе 'Sub Process' отвечает за создание некоторых значений в свойстве (список (целого числа)). Этот подпроцесс всегда должен вызываться при получении значения свойства.
MustInherit Class TestClassBase
Private _OutputList As New List(Of Integer)
Public Property OutputList() As List(Of Integer)
Get
Me.Process()
Return _OutputList
End Get
Set(ByVal value As List(Of Integer))
_OutputList = value
End Set
End Property
Public MustOverride Sub Process()
End Class
Class TestClass
Inherits TestClassBase
Public Overrides Sub Process()
OutputList.Clear()
OutputList.Add(1)
OutputList.Add(2)
OutputList.Add(3)
End Sub
End Class
Module ModuleTest
Sub Main()
Dim tmpList As New TestClass
tmpList.Process()
End Sub
End Module
Вызов Me.Process в Get-Part of Property создает исключение StackruException. Из-за TestclassBase как Mustinherit и необходимости реализации 'Sub Process' в унаследованном классе у меня нет доступа к Private _Outputlist.
Какой самый элегантный способ решить эту проблему?
1 ответ
Когда вы звоните OutputList.Clear()
в Process
что вызывает OutputList
добытчик. Что геттер то звонит Process
снова, который затем вызывает OutputList.Clear()
снова.
Эта последовательность вызовов будет продолжаться до тех пор, пока вы не исчерпаете стек и не сгенерируете исключение.
Вам нужно остановиться и подумать о том, чего вы на самом деле пытаетесь достичь (подсказка, что обработка в геттере - вообще плохая идея) и переосмыслить свой дизайн.