Cam*_*m L 0 vb.net getter setter properties
我有一个这样的课:
Public Class MyClass
Private _intList As New List(Of Integer)
Private _avg As Decimal
Public Sub Add(ByVal anInt As Integer)
_intList.Add(anInt)
End Sub
Public Property Avg() As Decimal
Get
Dim _sum As Integer = 0
For Each anInt In _intList
_sum += anInt
Next
Avg = If((_intList.Count > 0), _sum / _intList.Count, _avg)
Return _avg
End Get
Set(ByVal value As Decimal)
If _avg <> value Then
_avg = value
Console.WriteLine("Value changed")
End If
End Set
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
Getter正在计算平均值并调用Setter来保存该值.由于某种原因,我无法理解,平均值始终为0.例如:
Dim c As New Class2()
c.Add(1)
c.Add(2)
c.Add(3)
Console.WriteLine(c.Avg.ToString()) ' This will print 0
Run Code Online (Sandbox Code Playgroud)
我做错什么了吗?这是什么原因?
哇,我想你已经发现了一个很 VB奇怪的现象:当你是一个函数的定义里面,你可以返回一个值或者用Return 或通过使用=到"设置"功能的价值.
像这样:
Function GetInteger() As Integer
GetInteger = 5
End Function
Run Code Online (Sandbox Code Playgroud)
在上面的函数中,该行GetInteger = 5基本上等于Return 5*.
好的,所以你可能已经知道了.但这是奇怪的部分,我不知道这是刚才测试它的情况(诚然,在Mono,但我看到你的行为相同):显然这也适用于属性吸气剂.所以看看这一行:
Avg = If((_intList.Count > 0), _sum / _intList.Count, _avg)
Run Code Online (Sandbox Code Playgroud)
你实际上并没有在那里打电话给那里的财产制定者 ; 你正在设置getter 的返回值.您可以通过删除该行来验证这一点Return _avg; 突然你会看到你的吸气剂开始返回实际的平均值.
*不完全相同,因为您可以稍后设置GetInteger其他东西而不立即返回,而使用Return确保函数立即返回.
| 归档时间: |
|
| 查看次数: |
2904 次 |
| 最近记录: |