2013-05-17 26 views

回答

1

如果您尝试让某个“设置”类像某些人所建议的那样,您可能需要查看VB的My.Settings或My.Resources命名空间.Net

你最终会得到这样的:

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类会是什么样子:

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

这会给你一个消息框: “用户名:有些名称;另属性为:更改“

+0

是的,它是一次一个用户。 – paulopulus

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

@douglas:没有静态类在vb.net。 –

+1

上面的例子工作得很好。试试吧。 MSDN:“共享类或结构的成员使其可用于每个实例” –

+0

它工作正常,但它允许类实例化,这可能不是他想要的。有人可以在某处实例化该类,将属性更改为其他类型,并且由于它们是静态的(在VB中称为“共享”),它们将覆盖类中定义的内容。这可能会或可能不会被他接受。如果他使用常量而不是属性,那么类仍然可以被实例化,但常量不能被覆盖。 –

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,但如果在解释课程之后,你的答案会更好,但它也不鼓励使用全局变量。 –

+1

必须实例化类并以编程方式设置所有值,这种方式会让您拥有一个拥有所有设置的类的目的,如果这是他正在尝试做的。如果他只想要一个具有全局可访问变量的类,这将起作用。 –

+0

@DouglasBarbin良好的软件设计几乎从不决定需要多少打字。不得不一次性实例化一个类不是那么困难,这是不这样做的原因。由于设置不应该存储在一个全局变量中,至少如果它存储在一个对象中,它可以被传递到想要(正确)请求设置而不是(不恰当地)伸出到某个对象的方法和类全局变量来获取数据。所以,虽然它仍然不好,但至少是朝着正确方向迈出的一步。 –

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") 
相关问题