在.Net中的Property-Definition中防止StackOverflowException

时间:2015-11-17 09:26:14

标签: .net vb.net oop stack-overflow

在我的班级a'子流程'负责在属性中生成一些值(列表(整数))。当获得属性的值时,应始终调用此子进程。

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

在属性的Get-Part中调用Me.Process会产生StackOverflowException。由于TestclassBase为Mustinherit,因此需要实现“子流程”。在一个继承的课程中,我无法访问Private _Outputlist。

解决此问题最优雅的方法是什么?

1 个答案:

答案 0 :(得分:1)

当您致电OutputList.Clear()呼叫Process获取者的OutputList时。该getter然后再次调用Process,然后再次调用OutputList.Clear()

此调用序列将继续,直到您用完堆栈并生成异常。

你需要停下来想想你在这里想要实现的目标(暗示,在吸气剂中进行处理通常是一个坏主意)并重新考虑你的设计。