我需要将此变量click
设置为不同的数字。但是,当我重用ServicesForm()
时,click
即使在添加1后也始终为0.如何为整个类设置变量?
的getter / setter:
Class ServicesVariables
Private click As Integer = 0
Public Property clicks() As Integer
Get
Return click
End Get
Set(ByVal value As Integer)
click = value
End Set
End Property
End Class
尝试在此处使用它(删除了我的大部分代码,只显示主要部分):
Partial Class openapps_myapp Inherits System.Web.UI.Page
Private Sub ServicesForm()
Dim e As ServicesVariables = New ServicesVariables()
e.clicks += 1
End Sub
End Class
答案 0 :(得分:1)
每次调用ServicesForm()
时,都会创建New
类的ServicesVariables
实例,这意味着clicks
属性的值仅在每个实例中更改一次
如果您希望它可以重复使用,则需要通过在类级别声明它来更改ServicesVariables
对象的范围:
Partial Class openapps_myapp Inherits System.Web.UI.Page
Private MyServicesVariables As ServicesVariables = New ServicesVariables()
Private Sub ServicesForm()
MyServicesVariables.clicks += 1
End Sub
End Class
附加说明:
我更改了变量名称,因为不建议在类级使用单字母变量。但如果需要,您仍然可以使用任何其他变量名称。
您不应该为该属性及其支持私有字段使用相同的名称。例如,您可以为您的媒体资源Clicks
和私人字段_clicks
命名。实际上,这是一个很好的约定......
...也就是说,除非您计划更改clicks
属性的逻辑,否则您可以删除私有变量,并可以缩短您的属性,如下所示:
Public Property Clicks As Integer
那就是它!在这种情况下,这就是所谓的Auto-Implemented Property。编译器为您创建一个隐藏的后备字段,并负责该属性的实现。
回到原始问题,实际上还有另一种方法可以让一个属性可以从任何地方更改其值,即创建Shared Property。共享属性不需要该类的实例才能使用它们,它们在所有实例中共享。
如果共享成员不属于该对象的实例,则仅使用共享成员,换句话说,它的值对于每个实例都不同。如果这是您最初想要的,那么您的ServicesVariables
课程可能如下所示:
Public Class ServicesVariables
Public Shared Property Clicks As Integer
' ..
' ..
End Class
并且,在您的ServicesForm()
方法中,您可以直接访问Clicks
属性,而无需创建其类的实例:
Private Sub ServicesForm()
ServicesVariables.clicks += 1
End Sub