2008-10-28 53 views
4

我已經看到一些代碼導入,而不是一個名稱空間,使該類的所有靜態成員/方法可用。這是VB的一個功能嗎?或者其他語言也這樣做?VB.NET導入類

TestClass.vb

public class TestClass 
    public shared function Somefunc() as Boolean 
     return true 
    end function 
end class 

MainClass.vb

imports TestClass 

public class MainClass 
    public sub Main() 
     Somefunc() 
    end sub 
end class 

這些文件在App_Code目錄。只是好奇,因爲我從來沒有想過要這樣做,也沒有在任何地方讀過它。

回答

4

此功能的原因之一是模擬Visual Basic 6.0的GlobalMultiUse選件的實例化。 Visual Basic 6.0不具有在DLL邊界上公開模塊的功能。相反,您將實例化屬性設置爲GlobalMultiUse。它主要用於實用程序類,如導出一系列數學函數的類。

每次調用子類或函數的子類或GlobalMultiUse Instancing時,Visual Basic 6.0都會在調用函數之前在實例後面實例化一個類。

它可以被濫用來產生具有所有優點和缺點的全局函數/變量。

1

實際上,該功能是可用的,因爲它是一個shared函數。如果要刪除共享修飾符,則仍然必須創建該類的實例才能訪問它。

默認情況下,要實現對類中所有變量和所有函數的訪問,您需要繼承它。

據我所知importing一個類基本上是直接引用它,而不是創建任何類型的實例供你使用。

編輯清晰:聯繫是有VB具體環節,因此,解釋這屬於VB.NET

3

是的,這是一個Visual Basic language feature的功能。雖然您可以使用C#'s using statement創建別名,但您似乎無法將共享類導入範圍。說實話,我曾經只用過一次已經使用過的遺留項目。我看到了一些價值,但是恐怕它可能對未來代碼的可維護性造成更多的傷害。

2

每當我使用相同的庫很多時間,我都會使用它。一個很好的例子是System.Math。

C#不支持這個,我覺得這很煩人。

-4

等待,等待,等待....

我就在今天上午,我們可以派生的任何類 需要使用此方法/函數的引用裏面的所有對象(類第)發現;

Protected Overrides Sub Finalize() 
    MyBase.Finalize() 
End Sub 
+1

這與問題有什麼關係?它也沒有任何意義。這與派生類沒有任何關係,並且僅僅爲了調用基類而重寫一個方法是毫無意義的。 – 2011-04-18 05:33:55