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个文件中的问题.
我不知道这是否能回答你的问题,但以防万一......
打开"项目属性",然后单击"应用程序"属性.清除那里的根命名空间.然后每个文件中的命名空间声明将是"绝对的".
顺便说一句......这很可能会打破你的应用程序,可能需要一段时间来解决所有问题.确保在开始之前备份(或至少提交到您的仓库).
作为旁白.我认为将项目根命名空间与声明的命名空间相结合是令人困惑的.我经常做一个或另一个.
赛斯
您发布的重复答案提到了问题.
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#中记住,以确保您的命名空间声明是正确的.