我想使用我所有项目范围内的变量,有什么好的方法来完成这个?
public User as (some type)
(
var (sometype)
var2 (sometype)
)
例子:
If User.name = "ADMIN" Then
otherForm.Caption = User.name
otherForm.Show
End If
我想使用我所有项目范围内的变量,有什么好的方法来完成这个?
public User as (some type)
(
var (sometype)
var2 (sometype)
)
例子:
If User.name = "ADMIN" Then
otherForm.Caption = User.name
otherForm.Show
End If
我建议您为此类“全局”属性定义一个类。例如,您可以将其命名为“ProjectSettings”。
Public Class ProjectSettings
Public Shared CurrentUser as String
Public Shared DateTimeFormat as String
...etc...
Public Shared Sub Initialize()
'Initialize your members here
End Sub
End Class
从外部,您可以像这样访问它:
ProjectSettings.CurrentUser
ProjectSettings.DateTimeFormat
但是请记住,有很多不同的方法可以做到这一点。在上述情况下,您还可以将成员定义为只读属性,以确保没有人意外覆盖这些值。或者,如果您需要存储更多数据,您可以为 CurrentUser 定义一个对象“用户” 。
这真的取决于你想用你的全局属性实现什么。将它们放在中心位置很重要,这样团队中的每个人(包括您自己)都知道在哪里可以找到它们。否则它很容易导致非结构化、错误的代码。
您可以创建一个将所有这些数据封装在其中的类:
例子:
Public Class User
Public Property Name As String
Public Property Age As Integer
Sub New(_Name As String, _age As Integer)
Name = _Name
Age = _age
End Sub
End Class
然后,您只需声明它并设置属性:
Dim U as new User("Thomas", 18)
Messagebox.Show(U.Name) ' Will print "Thomas"
如果您尝试使用某些人建议的“设置”类,您可能需要查看 VB .Net 的 My.Settings 或 My.Resources 命名空间
你最终会得到类似的东西:
If User.name = My.Settings.Admin Then
otherForm.Caption = User.name
otherForm.Show
End If
这是你想要做的吗?
您的另一个选择是使用带有私有构造函数的模块或“Public NotInheritable”类,带有公共属性或常量。像这样:
Public NotInheritableClass ProjectSettings
Public Const Admin as String = "ADMIN"
Public Const Whatever as Decimal = 3.14D
Private Sub New()
End Sub
End Class
然后你可以有:
If User.name = ProjectSettings.Admin Then
otherForm.Caption = User.name
otherForm.Show
End If
我更喜欢这些解决方案,因为您无法实例化设置类。
如果您只想让您的 User 类可全局访问(这意味着一次只有一个给定的 User),那么您可以对 User 类做类似的事情。
编辑:您的用户类看起来像:
Public NotInheritableClass User
Public Const Name as String = "Some Name"
Public Property YouCanChangeThisProperty as String = "Change Me"
Private Sub New()
End Sub
End Class
要使用它:
User.YouCanChangeThisProperty = "Changed"
MessageBox.Show("User name: " & User.Name & "; the other property is now: " & User.YouCanChangeThisProperty")
这将为您提供一个消息框:“用户名:某个名称;另一个属性现在是:已更改”
您可以创建名为用户的新类
Public Class User
Private mstrName As String
Private mdBirth As Date
Public Property Name() As String
Get
Return mstrName
End Get
Set(ByVal vName As String)
mstrName = vName
End Set
End Property
Public Property BirthDate() As Date
Get
Return mdBirth
End Get
Set(ByVal vBirth As Date)
mdBirth = vBirth
End Set
End Property
ReadOnly Property Age() As Integer
Get
Return Now.Year - mdBirth.Year
End Get
End Property
End Class
你可以像这样使用这个类:
Dim Name1 as New User
Name1.Name = "ADMIN"
Name1.BirthDate = CDate("February 12, 1969")
然后检查它(通过 Msgbox 或其他):
Msgbox(Name1.Name)
Msgbox(Name1.BirthDate.ToString & " and Now is " & format(Name1.Age) & " years old")