我的项目中有类/模块。我想更好地组织我的代码以使其更易于维护。如何使用具有 Namespaces 的文件夹?
在 C# 中,只需向项目添加一个文件夹(如果需要,还可以添加一个子文件夹),然后在所需文件夹中创建一个或多个类,即可完成此操作。然而,在VB.NET中,必须使用嵌套的命名空间语句。创建文件夹和子文件夹并将所需的类/模块放入其中。这将有助于让一切井然有序。
以下内容适用于 Visual Studio 2022:
创建新的 Windows 窗体应用程序
打开解决方案资源管理器
出于本文的目的,我决定采用以下文件夹结构:
创建文件夹(名称:Folder1)
将类添加到文件夹(名称:Class1.vb)
将模块添加到文件夹1
为文件夹创建子文件夹(名称:SubFolder1)
将类添加到子文件夹(名称:Class1.vb)
为文件夹创建另一个子文件夹(名称:SubFolder2)
创建文件夹(名称:Folder2)
注意:重复上述过程,直到创建所需的文件夹结构。
现在已经创建了所需的文件夹结构,并且已根据需要添加了类/模块,我们需要修改每个类/模块中的代码以具有适当的命名空间。
根命名空间是在创建项目时创建的。我们将嵌套命名空间,但 root 命名空间已经指定。
查看根命名空间:
注意:这也可以在.vbproj中找到,可以用记事本打开。
我的项目名称/根命名空间是 NamespaceDemo。
我们将向类/模块文件添加命名空间语句以匹配文件夹结构。让我们从 Folder1\Class1.vb开始。
Class1.vb(文件夹1\Class1.vb)
Namespace Folder1
Public Class Class1
Public Shared Sub Test(message As String)
System.Diagnostics.Debug.WriteLine(message)
End Sub
End Class
End Namespace
如果想在Form1.vb中使用Test方法(即:Sub):
选项 1 用法:使用完全限定名称
在 Form1.vb:
Public Class Form1
Private Sub Test()
NamespaceDemo.Folder1.Class1.Test("Hello world.")
End Sub
End Class
或者因为Form1.vb也存在于NamespaceDemo中:
选项 2 用法 - 使用部分限定名称
在 Form1.vb:
Public Class Form1
Private Sub Test()
Folder1.Class1.Test("Hello world.")
End Sub
End Class
选项 3 用法 - 在 Form1.vb 中添加 Imports Statement 并为 Folder1 使用 alias
注意 在下面的代码中,F1 是一个 别名。
在 Form1.vb:
Imports F1 = NamespaceDemo.Folder1
Public Class Form1
Private Sub Test()
F1.Class1.Test("Hello world.")
End Sub
End Class
选项 4 用法 - 在 Form1.vb 中添加 Imports Statement 并为 Class1 使用 alias
在 Form1.vb:
Imports F1Class1 = NamespaceDemo.Folder1.Class1
Public Class Form1
Private Sub Test()
F1Class1.Test("Hello world.")
End Sub
End Class
为 Folder1\Module1 添加命名空间语句:
Module1.vb(文件夹1\Module1.vb)
Namespace Folder1
Public Module Module1
Public Sub LogMsg(message As String, Optional includeTimestamp As Boolean = True)
If includeTimestamp Then
message = $"{DateTime.Now.ToString("HH:mm:ss.fff")} - {message}"
Else
System.Diagnostics.Debug.WriteLine(message)
End If
End Sub
End Module
End Namespace
现在,我们将转到 Folder1\SubFolder1\Class1.vb。
Class1.vb(文件夹1\子文件夹1\Class1.vb)
Namespace Folder1
Namespace SubFolder1
Public Class Class1
Public Shared Function GetRandomNumber() As Integer
'create new instance
Dim r As Random = New Random()
Return r.Next(1, 100)
End Function
End Class
End Namespace
End Namespace
用法
如之前所示,为了更容易,请添加 Imports Statement(带有 alias)。
在 Form1.vb:
Imports Folder1SubFoler1Class1 = NamespaceDemo.Folder1.SubFolder1.Class1
Public Class Form1
Private Sub Test()
Dim val As Integer = Folder1SubFoler1Class1.GetRandomNumber()
End Sub
End Class
接下来,让我们转到 Folder1\SubFolder2,它也恰好有一个 Class1.vb 文件。
注意:对于此示例,我也选择在此命名空间中创建一个名为 Class1 的类。
Class1.vb(文件夹1\子文件夹2\Class1.vb)
Namespace Folder1
Namespace SubFolder2
Public Class Class1
Public Shared Function Echo(msg As String) As String
'https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/strings/interpolated-strings
Return $"You sent {msg}"
End Function
End Class
End Namespace
End Namespace
用法:
在 Form1.vb:
Imports Folder1SubFolder2Class1 = NamespaceDemo.Folder1.SubFolder2.Class1
Public Class Form1
Private Sub Test()
Dim message As String = Folder1SubFolder2Class1.Echo("Hello world")
Debug.WriteLine(message)
End Sub
End Class
希望现在这个过程已经很明显了。如果您有兴趣了解如何配置一些 Visual Studio 选项,请参阅此帖子。