在我的班级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。
解决此问题最优雅的方法是什么?
答案 0 :(得分:1)
当您致电OutputList.Clear()
呼叫Process
获取者的OutputList
时。该getter然后再次调用Process
,然后再次调用OutputList.Clear()
。
此调用序列将继续,直到您用完堆栈并生成异常。
你需要停下来想想你在这里想要实现的目标(暗示,在吸气剂中进行处理通常是一个坏主意)并重新考虑你的设计。