2011-10-31 52 views
0

我一直負責將VB6項目移植到VB.NET中。在VB6中,如果你是在一個單獨的類對特定的變量,你可以訪問的變量容易:如何在不刪除其他類的情況下訪問其他類中的變量?

Public Class Foo 
    Public k As Integer 
End Class 

Public Class Bar 
    k = 12 
End Class 

在VB.NET,我的理解是,纔可以在其他類中使用一個變量,你必須聲明它的一個新的實例:

Dim foobar As New Foo 

這將是罰款,但我需要訪問不同階層和每一個我宣佈一個新的實例時這些變量,它抹在變量的所有舊的價值觀念,這是我需要。任何人都可以幫忙嗎?我嘗試使用Inherits語句,但他們提出了許多問題。

謝謝。 尼克

+0

因爲我記得在Vb6中不可能,除非你的意思是模塊? – JonAlb

+0

我的意思是模塊,道歉。我在VB.NET模式! – Nick

+1

那麼在這種情況下,你可以在你的vb.net代碼中使用Public Module Foo作爲端口,它就可以正常工作。然而,一旦你有一個移植系統,我會建議重構和改變架構,從任何地方訪問變量會導致意大利麪代碼和維護噩夢。 – JonAlb

回答

4

您正在尋找shared關鍵字。這使得該成員可以用於其他類而不必擁有類的實例。見MSDN更多信息

+0

謝謝,我已經實現了,現在我創造性地命名的「variable.vb」類中的所有變量都是Public Shared。但是,在我的主要計算類中,每個變量名都必須以「變量」作爲前綴,因此必須使用「Variable.xxxx」引用一個變量。有沒有辦法繞過這個呢? – Nick

+1

不是100%確定的,但是您可以使用'with'語句:http://msdn.microsoft.com/en-us/library/wc500chb.aspx查看這篇文章的用法:http:// stackoverflow。 com/questions/283749/the-vb-net-with-statement-embrace-or-avoid – flipchart

+1

@Nick - 是的只是在頁面頂部添加'Imports [ProjectName]。[ClassName]' –

2

對於端口只使用公共模塊,就像您在VB6

Public Module Foo 
    Public k As Integer 
End Module 

Public Module Bar 
    Foo.k = 12 
End Module 

它不是好的做法,但它會幫助你在港口做你的第一關。理想情況下,你會重構出模塊/共享功能,如能夠從任何地方訪問變量系統將產生的代碼更難維護

+0

非常感謝。 – Nick

0
Dim YourobjName As YourClassName = Me.DataContext 

現在你可以使用公共方法和功能與YourobjName。這裏YourClassName將是你想訪問公共對象的類。