我见过一些导入了 Class 的代码,而不是命名空间,使该类的所有静态成员/方法都可用。这是VB的一个功能吗?或者其他语言也这样做?
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目录中。只是好奇,因为我以前从未想过这样做,也没有在任何地方读过它。
答案 0 :(得分:4)
此功能的原因之一是模拟Visual Basic 6.0的GlobalMultiUse Option for Instancing。 Visual Basic 6.0无法跨DLL边界公开模块。而是将实例化属性设置为GlobalMultiUse
。它主要用于实用程序类,如导出一系列数学函数的类。
每次使用GlobalMultiUse Instancing
调用类的子例程或函数时,Visual Basic 6.0在调用函数之前在后台实例化一个类。
可以滥用它来生成具有所有优点和缺点的全局函数/变量。
答案 1 :(得分:3)
是的,它是Visual Basic language feature。虽然您可以使用C#'s using statement创建别名,但似乎您无法将共享类导入范围。说实话,我只在曾经使用它的遗留项目中使用过一次。我看到了一些价值,但我担心它可能会对您未来的代码可维护性造成更大的伤害。
答案 2 :(得分:2)
每当我使用相同的库很多时,我就会使用它。一个很好的例子是System.Math。
C#不支持这一点,我发现这非常烦人。
答案 3 :(得分:1)
实际上,该功能可用,因为它是shared功能。如果要删除共享修饰符,则仍需要创建该类的实例以进行访问。
要在默认情况下访问类中的所有变量和所有函数,您可能希望继承它。
据我所知importing,一个类基本上是直接引用它,而不是创建任何类型的实例供你使用。
为了清晰起见编辑:链接是有特定于VB的链接,因此,解释了与VB.NET相关的功能
答案 4 :(得分:-4)
我今天早上发现我们可以派生出任何类中的所有对象(class-s) 需要使用此方法/函数的引用;
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub