从自己的访问器调用VB属性

时间:2016-03-15 15:00:28

标签: vb.net properties

当您从其访问者中访问属性名称时,我试图找到有关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

1 个答案:

答案 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)也可能有用:

  
      
  1. 对于Function,还有一个隐式局部变量   初始化称为函数返回变量,其名称为   函数的名称,其类型是函数的返回类型和   其初始值是其类型的默认值。
  2.   

行为可能在某些时候出现分歧。