我怎样才能让我的变量改变价值?
How can I get my variable to change the value?
我需要将此变量 click
设置为不同的数字。但是,当我重复使用 ServicesForm()
时,即使加 1,click
也始终为 0。如何为整个 class 设置一个变量?
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
每次调用 ServicesForm()
,都会创建 ServicesVariables
class 的 New
实例,这意味着 clicks
属性 每个实例只更改一次。
如果您希望它可重用,您需要通过在 class 级别声明它来更改 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
补充说明:
我更改了变量名,因为不建议使用单字母变量,特别是在class级别。但是如果你愿意,你仍然可以使用任何其他变量名。
您不应为 属性 及其支持的私有字段使用相同的名称。例如,您可以命名您的 属性 Clicks
和私有字段 _clicks
。实际上,这是一个很好的约定...
... 也就是说,除非您打算更改 clicks
属性 的逻辑,否则您可以摆脱私有变量并缩短你的 属性 如下:
Public Property Clicks As Integer
就是这样!在这种情况下,这就是您真正需要的,称为 Auto-Implemented Property。编译器为您创建一个隐藏的支持字段并负责 属性.
的实现
回到最初的问题,实际上还有另一种方法可以让一个属性的值可以从任何地方改变,那就是创建一个Shared Property.共享属性不需要 class 实例即可使用它们,它们在所有实例中 共享 。
你应该只使用不属于对象实例的共享成员,换句话说,它的值对于每个实例都没有不同。如果那是你最初想要的,你可以让你的 ServicesVariables
class 看起来像这样:
Public Class ServicesVariables
Public Shared Property Clicks As Integer
' ..
' ..
End Class
并且,在您的 ServicesForm()
方法中,您可以直接访问 Clicks
属性 而无需创建其 class:
的实例
Private Sub ServicesForm()
ServicesVariables.clicks += 1
End Sub
我需要将此变量 click
设置为不同的数字。但是,当我重复使用 ServicesForm()
时,即使加 1,click
也始终为 0。如何为整个 class 设置一个变量?
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
每次调用 ServicesForm()
,都会创建 ServicesVariables
class 的 New
实例,这意味着 clicks
属性 每个实例只更改一次。
如果您希望它可重用,您需要通过在 class 级别声明它来更改 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
补充说明:
我更改了变量名,因为不建议使用单字母变量,特别是在class级别。但是如果你愿意,你仍然可以使用任何其他变量名。
您不应为 属性 及其支持的私有字段使用相同的名称。例如,您可以命名您的 属性
Clicks
和私有字段_clicks
。实际上,这是一个很好的约定...... 也就是说,除非您打算更改
clicks
属性 的逻辑,否则您可以摆脱私有变量并缩短你的 属性 如下:Public Property Clicks As Integer
就是这样!在这种情况下,这就是您真正需要的,称为 Auto-Implemented Property。编译器为您创建一个隐藏的支持字段并负责 属性.
的实现
回到最初的问题,实际上还有另一种方法可以让一个属性的值可以从任何地方改变,那就是创建一个Shared Property.共享属性不需要 class 实例即可使用它们,它们在所有实例中 共享 。
你应该只使用不属于对象实例的共享成员,换句话说,它的值对于每个实例都没有不同。如果那是你最初想要的,你可以让你的 ServicesVariables
class 看起来像这样:
Public Class ServicesVariables
Public Shared Property Clicks As Integer
' ..
' ..
End Class
并且,在您的 ServicesForm()
方法中,您可以直接访问 Clicks
属性 而无需创建其 class:
Private Sub ServicesForm()
ServicesVariables.clicks += 1
End Sub