2009-12-12 49 views
2

在C#中,如果你这样做,它会编译:VS在C#在Visual Basic.NET中的命名空间之间的区别,以及如何处理与他们

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 

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

我做了一个使用CodeDom为C#和VB.NET生成代码的自定义工具。这就是为什么上述两种修正都不可行的原因:我不能指望我的用户有一个空的根名称空间,而且我讨厌在我的代码生成中必须执行VB特定的技巧(这种技巧会打败使用一种与语言无关的工具的目的,是不是?),比如挑选出“Root Namespace”(不是我知道自己的头顶上有多离谱),并将其包含在我的代码生成中。

我不想忽略全局修改器,因为它保护工具免受用户为生成的输出选择错误名称的影响。有人建议我应该如何处理这个问题吗?

+0

我目前没有Windows机器来检查,但是不能只是说“Private test As Test”?我认为包含的名称空间在解析过程中会自动搜索。 – 2009-12-13 03:40:59

回答

2

鉴于您无论如何都必须针对任一种语言执行不同的代码生成任务,它只是生成代码差异的另一个缩减。

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

祝你好运!

+0

是的,我结束了刚刚添加一个VB特定的代码生成怪癖。我很遗憾没有看到任何其他解决方案。 – Alex 2009-12-13 10:31:21

相关问题