在 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.Test'。” 在我的错误列表中。我找到了两种让它工作的方法,但对用户的期望都不合理。一种是从项目属性中删除“根命名空间”。另一种是在“全局”和“名称”之间包含该名称空间。
我制作了一个自定义工具,它使用 CodeDom 为 C# 和 VB.NET 生成代码。这就是为什么上述两个修复都不可行的原因:我不能指望我的用户有一个空的根命名空间,而且我不想在我的代码生成中执行特定于 VB 的技巧(有点打败了使用语言中立工具的目的,不是吗?)例如选择“根命名空间”(不是我不知道怎么想的)并将其包含在我的代码生成中。
我也不想遗漏全局修饰符,因为它可以保护该工具免受用户为生成的输出选择错误名称的影响。有人对我应该如何处理这个有建议吗?