vb.net模块语句 vbnet single( 二 )


VB.NET入门--Imports 语句 导入在引用vb.net模块语句的项目和程序集中定义的命名空间或编程元素 此外 导入在同一个项目中定义的命名空间或元素
Imports [ aliasname = ] namespace or Imports [ aliasname = ] namespace element
各部分说明
aliasname
可选 导入别名 或名称 代码可按该名称而不是完全限定字符串来引用 namespace
namespace
必选 所导入命名空间的完全限制名称 可以为嵌套到任意级别的命名空间的字符串
element
可选 命名空间中所声明编程元素的名称 可以为任何容器元素
备注
每个源文件可以包含任意数量的Imports语句 这些语句必须位于任何选项声明(如Option Strict语句)之后 任何编程元素声明(如Module或Class语句)之前
只能在文件级别使用Imports这意味着导入的声明上下文必须是源文件 而不能是命名空间 类 结构 模块 接口 过程或块
当需要使用在一个或多个命名空间中声明的同名项目时 导入别名十分有用
请注意Imports语句不会将其vb.net模块语句他项目和程序集中的元素提供给您的项目使用 导入不会取代对引用的设置 它只是使那些已经可用于项目的名称不再需要加以限定
规则
别名不应使用与 aliasname 相同的名称在模块级别声明成员 如果这样做 Visual Basic 编译器只对声明的成员使用 aliasname 而不再将其识别为导入别名
命名空间名称可以提供单个命名空间名称 也可以提供嵌套命名空间的字符串 每个嵌套命名空间都通过句点 () 与下一个更高级别的命名空间分隔 如下面的示例中所述
Imports System Collections Generic
元素类型如果提供 element 它必须表示 容器元素 即可包含其他元素的编程元素 容器元素包括类 结构 模块 接口和枚举
行为
范围Imports语句所提供元素的范围取决于是否指定vb.net模块语句了 element 如果仅指定了 namespace 则该命名空间中所有具有唯一名称的成员以及该命名空间内容器元素的成员无需限定即可使用 如果既指定了 namespace 又指定了 element 则只有该元素的成员无需限定即可使用
限定命名空间或容器元素外部的代码通常必须使用该命名空间或容器元素的名称来限定成员的名称 除非您的项目要访问具有相同名称的另一个成员 否则使用Imports语句后将不必进行此类限定 在这种情况下 您可以在每个Imports语句中指定一个 aliasname 然后 您只需导入别名即可限定具有相同名称的成员
示例
下面的示例将导入 Microsoft VisualBasic Strings 类并给其分配一个别名str该别名可用于访问 Left 方法
Place Imports statements at the top of your program Imports str = Microsoft VisualBasic Strings Visual BasicClass testClassSub showHello()Display only the word HelloMsgBox(str Left( Hello World ))End Sub End Class lishixinzhi/Article/program/ASP/201311/21880
VB.NET中的模块 在C#中有 静态类 的概念 自然里边全部的方法都是静态的 这意味着你可以直接通过 类名 方法名 去调用(例如System的Math类就是典型) 在VB NET中 没有 静态类 的概念(当然你可以用 单例模式 把构造函数弄成Private的方式 其它方法都是静态的)如果某些方法需要被其它地方频繁使用 可以创建 模块 在VB NET中一旦创建了模块 其中任何方法 属性或者变量都可以被其它地方引用 因此适合全局情况下频繁交互的情况(比如初始化加载的参数 可能后续程序要使用)等
现在问题在于 如果你把一个类似以下的模块代码封装成DLL类库 无论在C#或者是VB NET中都无法引用到其方法
Module A
Public Sub Test()
End Sub
End Module
或许你感到很奇怪——不是在VB NET中这样定义一个Module就直接可以使用其内部方法了么?为什么封装成类库就不可以了呢?上网问了一些人 众说纷纭 后来我在他人协助下终于成功解决了这个问题——解决方法很简单——只要在Module前加Public

推荐阅读