我怎样才能让我的变量改变价值?

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