如何声明具有多个属性的全局变量?

时间:2013-05-17 16:31:56

标签: vb.net

我想使用一个在我所有项目范围内的变量,这是一个很好的方法来实现这个目标吗?

public User as (some type)
(
 var (sometype)
 var2 (sometype)
)

示例:

If User.name = "ADMIN" Then
  otherForm.Caption = User.name
  otherForm.Show
End If

4 个答案:

答案 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")