繁体   English   中英

Visual Basic和命名空间问题

[英]Visual Basic and a Namespace Issue

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

有什么我可以贴在命名空间声明的前面来使其绝对的吗? 而不是重复自己? 我宁愿找到这种解决方案,也不想删除名称空间声明(以防文件再次移动)

最终目标:能够在“名称空间RebateCalculator”上进行搜索/替换,以解决150个文件中的问题。

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

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

顺便说一句...这很可能破坏您的应用程序,并且可能需要一段时间才能修复所有问题。 在开始之前,请确保备份(或至少要提交给您的仓库)。

作为旁白。 我认为将项目根命名空间与声明的命名空间结合使用会造成混淆。 我通常会做一个或另一个。

赛斯

您发布的重复答案暗示了该问题。

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#中,以确保您的命名空间声明正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM