我想使用一个在我所有项目范围内的变量,这是一个很好的方法来实现这个目标吗?
public User as (some type)
(
var (sometype)
var2 (sometype)
)
示例:
If User.name = "ADMIN" Then
otherForm.Caption = User.name
otherForm.Show
End If
答案 0 :(得分:2)
我建议你为这样的'全局'属性定义一个类。 例如,您可以将其命名为“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 定义对象'用户'。
这实际上取决于你想要实现的你的全局属性。让他们中心非常重要,这样团队中的每个人(包括您自己)都知道在哪里找到它们。否则,它很容易导致非结构化,错误的代码。
答案 1 :(得分:2)
您可以创建一个封装其中所有数据的类:
示例:
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"
答案 2 :(得分:1)
如果您尝试使用某些建议的“设置”类,您可能需要查看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")
这将为您提供一个消息框: “用户名:一些名称;另一个属性现在是:已更改”
答案 3 :(得分:1)
您可以创建名为用户
的新类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")