Visual Basic.NET中的命名空间与C#中的命名空间之间的区别以及如何处理它们

时间:2009-12-12 21:27:23

标签: c# vb.net namespaces codedom

在C#中,如果你这样做,它将编译:

namespace Name
{
    public class Test
    {
    }

    public class TestUse
    {
        private global::Name.Test test;
    }
}

但是,如果在VB.NET中尝试相同的操作,则不会:

Namespace Name
    Public Class Test
    End Class

    Public Class TestUse
        Private test As Global.Name.Test
    End Class
End Namespace

我得到(取决于我尝试使用“Test”的方式)“'Name'不是'< Default>'的成员。”或“类型'Name.Test'未定义。”在我的错误列表中。我找到了两种方法使它工作,但对用户来说都不合理。一种是从项目属性中删除“根名称空间”。另一种是在“全局”和“名称”之间包含该命名空间。

我制作了一个自定义工具,它使用CodeDom为C#和VB.NET生成代码。这就是为什么上面两个修复都不可行的原因:我不能指望我的用户有一个空的根命名空间,我不想在我的代码生成中做一些特定于VB的技巧(有点挫败了使用与语言无关的工具的目的,不是吗?),例如挑选“根名称空间”(不是我知道如何脱离我的头脑)并将其包含在我的代码生成中。

我也不想省略全局修饰符,因为它可以保护工具免受为生成的输出选择错误名称的用户的影响。有没有人建议我应该怎么处理这个?

1 个答案:

答案 0 :(得分:2)

鉴于你必须为这两种语言执行不同的代码生成任务,它只是产生该代码的差异的另一个下降。

与其他实现细节相比,编写VB特定的插入默认命名空间的技巧并不是一个大问题。

祝你好运!