2013-05-17 23 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") 
相關問題