Visual Basic和命名空间问题

Bud*_*Joe 1 .net vb.net namespaces

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

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

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

Set*_*man 6

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

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

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

作为旁白.我认为将项目根命名空间与声明的命名空间相结合是令人困惑的.我经常做一个或另一个.

赛斯


Chr*_*way 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
Run Code Online (Sandbox Code Playgroud)

和这堂课

Public Class TestClass
    Public aField As String = "Default"
End Class
Run Code Online (Sandbox Code Playgroud)

输出是

TestVBConsole.TestClass
Run Code Online (Sandbox Code Playgroud)

C#输出中的相同程序

TestClass
Run Code Online (Sandbox Code Playgroud)

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