Visual Basic和命名空间问题

时间:2009-12-17 17:29:08

标签: .net vb.net namespaces

我正在清理Visual Basic(.NET 2.0)解决方案。将它拆分为两个项目。 150个类在文件顶部有Namespace RebateCalculator。 这些文件现在位于具有默认命名空间RebateCalculator的Project中。如果我要插入一个Class1.cs文件,然后插入所有其他文件的名称空间声明 - 那么完全限定的类名将是RebateCalculator.RebateCalculator.Class1

有没有什么我可以坚持命名空间声明的前面,以使其绝对?而不是重复自己?我宁愿找到这种解决方案而不是删除命名空间声明(如果文件再次移动)

结束目标:能够在'Namespace RebateCalculator'上搜索/替换以解决150个文件中的问题。

2 个答案:

答案 0 :(得分:6)

我不知道这是否能回答你的问题,但以防万一...

打开“项目属性”,然后单击“应用程序”属性。清除那里的根命名空间。然后每个文件中的命名空间声明将是“绝对的”。

顺便说一句......这很可能会破坏你的应用程序,可能需要一段时间来解决所有问题。确保在开始之前备份(或至少提交到您的仓库)。

暂且不说。我认为将项目根命名空间与声明的命名空间相结合是令人困惑的。我经常做一个或另一个。

赛斯

答案 1 :(得分:5)

您发布的重复答案提到了问题。

VB.Net具有“根名称空间”的概念。将Namespace语句添加到代码文件时,给定的名称将与根命名空间组合以形成完整的命名空间。

因此,在VB.Net中,如果您的根命名空间是MyRoot,然后使用MyNamespace的命名空间创建一个类和环绕声,那么完整的类名是MyRoot.MyNamespace.ClassName。如果不使用Namespace语句,则完整的类名称为MyRoot.ClassName。换句话说,根命名空间设置有助于命名空间的名称。

在C#中,情况并非如此。 C#有一个“默认命名空间”。这只是一个名称空间定义,在您创建它们时会自动添加到新类中。如果删除名称空间声明,则该类没有名称空间。换句话说,默认命名空间设置实际上不会影响命名空间的名称。

在C#中,命名空间声明中的任何内容都是使用的命名空间。默认命名空间设置仅确定默认情况下在代码文件中插入的内容。

使用这个VB程序,其根名称空间设置为“TestVBConsole”,并且该类中没有名称空间语句:

Module Module1
    Sub Main()
        Dim tc As New TestClass

        Console.WriteLine(tc.GetType().FullName)

    End Sub
End Module

和这个班级

Public Class TestClass
    Public aField As String = "Default"
End Class

输出

TestVBConsole.TestClass

C#输出中的相同程序

TestClass

关于你的问题,我认为没有办法覆盖这种行为。您只需要在C#中记住,以确保您的命名空间声明是正确的。

相关问题