Нет простого способа хранить указатели на переменные в VB.NET.В качестве обходного пути вы можете использовать класс для хранения ваших переменных, так как класс всегда используется в качестве указателя.
Вот пример способа достижения этого с помощью ContainerClass
, которому принадлежит словарь целых чисел,Один интерес этого метода заключается в том, что вы можете динамически объявлять и называть «переменные».На самом деле они будут управляться KeyValuePair
.После того, как вы создали экземпляр этого класса, вы можете использовать его для «управления» вашими переменными, используя этот класс в качестве указателя.
Я включил цикл, который устанавливает все целые числа в одно и то же число просто для удовольствияи продемонстрировать вид манипуляции, который в конечном итоге будет иметь эффект, аналогичный тому, который описан в вашем вопросе.
Public Class Form2
'This is the container class which will be used to bypass the lack of pointers
'if you wanted to change a property, like the window width, it would be more difficult, but simples variables will be no trouble
Private variableContainer As New VariableContainer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
variableContainer.AddVar("X", 5)
variableContainer.AddVar("Y", 15)
Debug.Print(variableContainer.GetVar("X"))
Debug.Print(variableContainer.GetVar("Y"))
variableContainer.SetAllVar(42)
Debug.Print("Next line will print 42")
Debug.Print(variableContainer.GetVar("X"))
End Sub
End Class
Public Class VariableContainer
'I know a public variable wouldn't need the fancy functions down there, but it's usually better to encapsulate, especially if you're working with a team
'and "future you" count as a teammate, never forget that...
Private list As New Dictionary(Of String, Integer)
Public Sub AddVar(ByVal name As String, ByVal value As Integer)
list.Add(name, value)
End Sub
Public Function GetVar(ByVal name As String) As Integer
If list.ContainsKey(name) Then
Return list(name)
Else
'I choose -1 arbitrarily, don't put too much thinking into this detail
Return -1
End If
End Function
Public Sub SetVar(ByVal name As String, ByVal num As Integer)
If list.ContainsKey(name) Then
list(name) = num
End If
End Sub
Public Sub SetAllVar(ByVal num As Integer)
Dim dict As New Dictionary(Of String, Integer)
For Each item As KeyValuePair(Of String, Integer) In list
dict.Add(item.Key, num)
Next
list = dict
End Sub
End Class
Веселитесь!