当您从其访问者中访问属性名称时,我试图找到有关VB属性行为的文档。我期望Get MyMinions
属性访问的第一行是递归的(ish),但不是。 MyMinions
在其访问者中的值始终为Nothing
,为什么它总是一无所有,是否记录在任何地方?
Public Class MyJob
Public Sub New()
MinionCount = 3
End Sub
Public Property MinionCount As Int32
Public Property MyMinions As List(Of Object)
Get
If MinionCount > 0 AndAlso MyMinions Is Nothing Then
_myMinions = New List(Of Object)() 'here would be DAL call
End If
Return _myMinions
End Get
Set(value As List(Of Object))
_myMinions = value
End Set
End Property
Private _myMinions As List(Of Object) = Nothing
End Class
答案 0 :(得分:3)
Property getter的作用与函数类似,其中名称是隐式的类型化局部变量。从VB Spec的9.7.1开始:
一个特殊的局部变量,在Get中隐式声明 存取主体的声明空间与属性同名, 表示属性的返回值...
规范包括以下示例:
ReadOnly Property F(i As Integer) As Integer
Get
If i = 0 Then
F = 1 ' Sets the return value.
Else
F = F(i - 1) ' Recursive call.
End If
End Get
End Property
而不是Return 1
代码使用F = 1
为返回的本地变量/函数名称赋值。
因此,在您的代码中,MyMinions
是本地返回变量,并且在您为其分配内容之前将是Nothing
(List的默认值)。由于它是 local 变量,因此不会导致递归。
prop getter的功能就像一个函数,那里的解释(10.1.1)也可能有用:
- 对于Function,还有一个隐式局部变量 初始化称为函数返回变量,其名称为 函数的名称,其类型是函数的返回类型和 其初始值是其类型的默认值。
醇>
行为可能在某些时候出现分歧。