4

我已经看到了一些导入而不是命名空间的代码,从而使该类的所有静态成员/方法都可用。这是VB的特性吗?还是其他语言也这样做?

测试类.vb

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

主类.vb

imports TestClass

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

这些文件位于 App_Code 目录中。只是好奇,因为我以前从未想过这样做,也没有在任何地方读过它。

4

5 回答 5

4

使用此功能的原因之一是模拟 Visual Basic 6.0 的 GlobalMultiUse Option for Instancing。Visual Basic 6.0 无法跨 DLL 边界公开模块。相反,您将实例化属性设置为GlobalMultiUse. 它主要用于实用程序类,例如导出一系列数学函数的类。

每次使用 调用类的子例程或函数时GlobalMultiUse Instancing,Visual Basic 6.0 都会在调用函数之前在后台实例化一个类。

它可以被滥用来生成具有所有优点和缺点的全局函数/变量。

于 2008-10-29T12:33:55.420 回答
3

是的,它是Visual Basic 语言的一项功能虽然您可以使用C# 的 using 语句创建别名,但您似乎无法将共享类导入范围。老实说,我只在已经使用过它的遗留项目中使用过一次。我看到了一些价值,但我担心它可能对您的代码的未来可维护性造成弊大于利。

于 2008-10-28T16:44:10.813 回答
2

每当我大量使用同一个库时,我都会使用它。一个很好的例子是 System.Math。

C# 不支持这一点,我觉得这很烦人。

于 2008-10-30T06:01:32.497 回答
1

实际上,该功能是可用的,因为它是一个共享功能。如果要删除 shared 修饰符,您仍然必须创建该类的实例才能访问它。

要在默认情况下实现对类中所有变量和所有函数的访问,您需要继承它。

据我所知,导入一个类基本上是直接引用它,而不是创建它的任何实例供您使用。

为清楚起见进行编辑:链接中有 VB 特定链接,因此,解释了与 VB.NET 相关的功能

于 2008-10-28T16:17:55.437 回答
-4

等等,等等,等等……

今天早上我发现我们可以使用这个方法/函数派生任何需要引用的类中的所有对象(类);

Protected Overrides Sub Finalize()
    MyBase.Finalize()
End Sub
于 2011-04-18T02:08:14.677 回答