Невозможно объявить глобальные переменные, как вы, вероятно, представляете их в VB.NET.
То, что вы можете сделать (как некоторые издругие ответы предлагали) объявлять все, что вы хотите рассматривать как глобальные переменные, а не статические переменные внутри одного конкретного класса:
Public Class GlobalVariables
Public Shared UserName As String = "Tim Johnson"
Public Shared UserAge As Integer = 39
End Class
Однако вам нужно будет полностью квалифицировать все ссылки на эти переменныевезде, где вы хотите использовать их в своем коде.В этом смысле они не относятся к типу глобальных переменных, с которыми вы, возможно, знакомы по другим языкам, поскольку они все еще связаны с каким-то конкретным классом.
Например, если вы хотите отобразить окно сообщения вКод вашей формы с именем пользователя, вам нужно сделать что-то вроде этого:
Public Class Form1 : Inherits Form
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
MessageBox.Show("Hello, " & GlobalVariables.UserName)
End Sub
End Class
Вы не можете просто получить доступ к переменной, набрав UserName
за пределами класса, в котором она определена -Вы также должны указать имя класса, в котором он определен.
Если практика полной квалификации ваших переменных ужасает или расстраивает вас по какой-либо причине, вы всегда можете импортировать класс, содержащий вашиобъявления глобальных переменных (здесь GlobalVariables
) вверху каждого файла кода (или даже на уровне проекта, в окне свойств проекта).Затем вы можете просто ссылаться на переменные по их именам.
Imports GlobalVariables
Обратите внимание, что это точно то же самое, что компилятор делает для вас за кулисами, когда вы объявляетеваши глобальные переменные в Module
, а не Class
.В VB.NET, который предлагает модули для целей обратной совместимости с предыдущими версиями VB, Module
- это просто запечатанный статический класс (или, в терминах VB.NET, Shared NotInheritable Class
).Среда IDE позволяет вызывать участников из модулей без полной квалификации или импорта ссылки на них.Даже если вы решите пойти по этому пути, стоит понять, что происходит за кулисами в объектно-ориентированном языке, таком как VB.NET.Я думаю, что как программисту важно понимать, что происходит и что именно ваши инструменты делают для вас, даже если вы решите их использовать.И что бы это ни стоило, я не рекомендую это как «лучшую практику», потому что я чувствую, что это имеет тенденцию к неясности и чистому объектно-ориентированному коду / дизайну.Гораздо более вероятно, что программист C # поймет ваш код, если он написан так, как показано выше, чем если вы поместите его в модуль и позволите компилятору обрабатывать все.
Обратите внимание, что, как упоминался хотя бы еще один ответ, VB.NET является полностью объектно-ориентированным языком.Это означает, среди прочего, что все является объектом.Даже «глобальные» переменные должны быть определены в экземпляре класса, потому что они также являются объектами.Каждый раз, когда вы чувствуете необходимость использовать глобальные переменные в объектно-ориентированном языке, это признак того, что вам нужно переосмыслить свой дизайн.Если вы просто переключаетесь на объектно-ориентированное программирование, вам стоит остановиться и изучить некоторые базовые шаблоны, прежде чем углубляться в написание кода.