Предотвращение исключения 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() снова.

Эта последовательность вызовов будет продолжаться до тех пор, пока вы не исчерпаете стек и не сгенерируете исключение.

Вам нужно остановиться и подумать о том, чего вы на самом деле пытаетесь достичь (подсказка, что обработка в геттере - вообще плохая идея) и переосмыслить свой дизайн.

Другие вопросы по тегам