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

标签 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

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

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

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

最佳答案

鉴于您无论如何都必须为任何一种语言执行不同的代码生成任务,这只是生成该代码的差异中的又一滴水。

与其他实现细节相比,乍一看,插入默认 namespace 的 VB 特定技巧的编码并不是什么大问题。

祝你好运!

关于c# - Visual Basic.NET 与 C# 中命名空间的区别以及如何处理它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1894753/

相关文章:

python - 使用自由变量时是否创建了命名空间?

c# - 获取事件的 Visual Studio 对象

javascript - 在 asp.net c# 中禁用浏览器的自动完成文本框

vb.net - Office 加载项安装 VSTO 下载失败

c# - 如何将两个序列合并为一个?

c++ - 如何不使用 C 头文件的声明污染全局 namespace ?

javascript - C# 打开隐藏的浏览器并导航

c# - 在 Unity C# 中使用 2D 数组解析 JSON

vb.net - 通过 VB.NET 创建/编辑文本文件

php - 是否可以根据 PHP 中的命名空间自动加载文件?