我正在清理Visual Basic(.NET 2.0)解决方案。将它拆分为两个项目。 150个类在文件顶部有Namespace RebateCalculator。 这些文件现在位于具有默认命名空间RebateCalculator的Project中。如果我要插入一个Class1.cs文件,然后插入所有其他文件的名称空间声明 - 那么完全限定的类名将是RebateCalculator.RebateCalculator.Class1
有没有什么我可以坚持命名空间声明的前面,以使其绝对?而不是重复自己?我宁愿找到这种解决方案而不是删除命名空间声明(如果文件再次移动)
结束目标:能够在'Namespace RebateCalculator'上搜索/替换以解决150个文件中的问题。
答案 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#中记住,以确保您的命名空间声明是正确的。