如何让变量改变值?

时间:2018-05-18 05:09:27

标签: asp.net vb.net class getter-setter

我需要将此变量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

1 个答案:

答案 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