1

我想使用我所有项目范围内的变量,有什么好的方法来完成这个?

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

例子:

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

4 回答 4

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 定义一个对象“用户” 。

这真的取决于你想用你的全局属性实现什么。将它们放在中心位置很重要,这样团队中的每个人(包括您自己)都知道在哪里可以找到它们。否则它很容易导致非结构化、错误的代码。

于 2013-05-17T16:55:06.527 回答
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"
于 2013-05-17T16:55:39.763 回答
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")

这将为您提供一个消息框:“用户名:某个名称;另一个属性现在是:已更改”

于 2013-05-17T17:20:39.643 回答
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")
于 2013-05-17T18:32:09.507 回答