Как я могу получить свою переменную, чтобы изменить значение? - PullRequest
0 голосов
/ 18 мая 2018

Мне нужно установить эту переменную click на другое число.Однако при повторном использовании ServicesForm(), click всегда равно 0 даже после добавления 1. Как я могу установить переменную для всего класса?

Получатель / установщик:

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 голосов
/ 18 мая 2018

Каждый раз, когда вы вызываете 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
    

    Вот и все!Это действительно все, что вам нужно в этом случае, которое называется Автоматически реализуемое свойство .Компилятор создает скрытое вспомогательное поле для вас и заботится о реализации свойства.


Возвращаясь к исходной проблеме , на самом деле есть другой способиметь свойство, значение которого можно изменить из любого места, то есть создать общее свойство .Общим свойствам не нужен экземпляр класса для их использования, они shared для всех экземпляров.

Вы должны only использовать общий член, когдаон не принадлежит экземпляру объекта, другими словами, его значение не отличается для каждого экземпляра.Если это то, что вы изначально хотели, ваш класс ServicesVariables может выглядеть следующим образом:

Public Class ServicesVariables

    Public Shared Property Clicks As Integer

    ' ..
    ' ..

End Class

И в вашем методе ServicesForm() вы можете получить доступ к свойству Clicks напрямую, не создавая экземплярсвоего класса:

Private Sub ServicesForm()
    ServicesVariables.clicks += 1
End Sub
...