<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 在 Visual Basic 中組織代碼 > 原文: [https://zetcode.com/lang/visualbasic/organizingcode/](https://zetcode.com/lang/visualbasic/organizingcode/) 在 Visual Basic 教程的這一部分中,我們將展示如何組織代碼。 我們將介紹模塊,過程和名稱空間以及作用域。 Visual Basic 語句被組織為塊,模塊,類和名稱空間。 這有助于使代碼更具可維護性和魯棒性。 正確的代碼組織可以防止在代碼中出錯。 Visual Basic 程序的基本構建塊是: * 程序集 * 命名空間 * 模塊 * 類 * 過程和函數 * 塊 * 語句 程序集是 DLL 或 exe 文件。 程序集是用于部署,版本控制和安全性的已編譯代碼庫。 名稱空間是提供項目上下文的抽象容器。 模塊是在其整個命名空間中可用的引用類型。 類是 OOP 程序的基本構建塊。 過程是為執行特定任務而創建的程序的一個單元。 塊是由`If`或`While`之類的某些關鍵字提供的 Visual Basic 語句的最低級別組織。 語句是 Visual Basic 程序中的原子,是代碼的最小單位。 與該主題密切相關的是變量的作用域和持續時間。 作用域是聲明的變量的可見性。 | 作用域 | 描述 | | --- | --- | | 塊作用域 | 僅在聲明它的代碼塊中可用 | | 過程作用域 | 在聲明它的過程中可用 | | 模塊作用域 | 可用于聲明該模塊的模塊,類或結構中的所有代碼 | | 命名空間作用域 | 可用于聲明它的名稱空間中的所有代碼 | 變量的生命周期是變量保存值的時間段。 只要過程正在執行,局部變量就存在。 之后,它們將不再可用。 但是,如果我們將變量聲明為靜態變量,則該過程終止后該變量將繼續存在。 在應用的生存期內,存在模塊,共享和實例變量。 ## 基本例子 首先,我們介紹一些基本知識。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine("Simple example") End Sub End Module ``` 在此示例中,我們有一個名為`Example`的模塊。 在示例內部,我們有一個`Main()`子例程。 將一些消息打印到控制臺的語句位于`Main()`過程中。 事件最簡單的 Visual Basic 程序必須正確組織。 ```vb Option Strict On Public Class Example Public Shared Sub Main() Console.WriteLine("Simple example") End Sub End Class ``` 確切的示例,現在沒有模塊。 我們也可以將代碼放入類中。 由于未實例化該類,因此必須將`Main(`過程聲明為`Shared`。 編譯器將在不創建類實例的情況下調用`Main()`方法。 這就是為什么必須將其聲明為`Shared`的原因。 Java 和 C# 的工作原理相同。 ## 命名空間 命名空間用于在最高邏輯級別上組織代碼。 他們對公開給其他程序和應用的編程元素進行分類和呈現。 在一個名稱空間內,我們可以聲明另一個名稱空間,一個類,一個接口,一個結構,一個枚舉或一個委托。 在下面的代碼中,我們有兩個共享相同名稱空間的文件。 ```vb Option Strict On NameSpace ZetCode Module Example1 Public Dim x As Integer = 0 Sub Init() x += 100 Console.WriteLine(x) End Sub End Module End NameSpace ``` 我們有一個`ZetCode`命名空間。 在名稱空間中,我們有一個模塊`Example1`。 ```vb NameSpace ZetCode ``` 我們聲明一個名為`ZetCode`的命名空間。 ```vb Public Dim x As Integer = 0 ``` 在模塊中,我們聲明并初始化`x`變量。 ```vb Sub Init() x += 100 Console.WriteLine(x) End Sub ``` 我們有一個`Init()`方法,其中使用了`x`變量。 ```vb Option Strict On NameSpace ZetCode Module Example Sub Main() Init() x += 100 Console.WriteLine(x) End Sub End Module End NameSpace ``` 在第二個文件中,我們使用上一個文件中的`Init()`方法。 ```vb NameSpace ZetCode ``` 我們在同一個命名空間中工作。 ```vb Init() x += 100 Console.WriteLine(x) ``` 我們調用`Init()`過程并使用`x`變量。 過程和`x`變量都在不同的文件和不同的模塊中定義。 但是它們是在同一個命名空間中定義的,因此我們可以使用它們。 ```vb $ ./samenamespace.exe 100 200 ``` 輸出。 以下代碼示例具有兩個不同的名稱空間。 我們使用`Imports`關鍵字從其他名稱空間導入元素。 ```vb Option Strict On NameSpace MyMath Public Class Basic Public Shared PI As Double = 3.141592653589 Public Shared Function GetPi() As Double Return Me.PI End Function End Class End NameSpace ``` 我們在`MyMath`名稱空間中具有`Math`類的框架。 在`Basic`類中,我們定義`PI`常量和`GetPi()`方法。 ```vb Option Strict On Imports MyMath NameSpace ZetCode Public Class Example Public Shared Sub Main() Console.WriteLine(Basic.PI) Console.WriteLine(Basic.GetPi()) End Sub End Class End NameSpace ``` 在此文件中,我們使用`MyMath`命名空間中的元素。 ```vb Imports MyMath ``` 我們將元素從`MyMath`命名空間導入到我們的命名空間中。 ![Root namespace](https://img.kancloud.cn/17/51/175110d6f31fa79b7a17bcf9c4d0858e_669x227.jpg) 圖:根命名空間 在 Visual Basic 2008 Express 版上,會自動創建一個根名稱空間。 可以在項目屬性的“應用”選項卡下找到。 刪除根名稱空間或將其包含在導入路徑中。 例如,如果在那里有“測試”,則將行更改為`Imports Testing.MyMath`。 ```vb Console.WriteLine(Basic.PI) Console.WriteLine(Basic.GetPi()) ``` 現在我們可以使用這些元素。 在我們的例子中,`PI`變量和`GetPi()`方法。 ```vb Option Strict On ' Imports MyMath NameSpace ZetCode Public Class Example Public Shared Sub Main() Console.WriteLine(MyMath.Basic.PI) Console.WriteLine(MyMath.Basic.GetPi()) End Sub End Class End NameSpace ``` 請注意,我們不需要`Imports`關鍵字。 在示例中,將其注釋掉。 我們可以通過使用元素的完全限定名稱來使用其他命名空間中的元素。 ## 模塊 模塊用于組織代碼并包裝類似用途的變量,屬性,事件和過程。 與類不同,模塊不是類型。 可以在名稱空間或文件中創建模塊。 不能在另一個模塊,類,結構,接口或塊內創建模塊。 模塊中的所有成員都是隱式共享的。 模塊具有“朋友”訪問權限。 這意味著模塊可在裝配中的任何位置訪問。 ```vb Option Strict On Module First Public x As Byte = 11 Public Sub FirstModule() Console.WriteLine("First module") End Sub End Module Module Second Public y As Byte = 22 Public Sub SecondModule() Console.WriteLine("Second module") End Sub End Module Module Example Sub Main() Console.WriteLine(x) Console.WriteLine(Second.y) FirstModule() SecondModule() End Sub End Module ``` 我們定義了三個模塊。 前兩個模塊具有變量和過程。 這些將在第三個模塊中使用。 ```vb Module First Public x As Byte = 11 ... End Module ``` 我們也可以在模塊內部使用訪問說明符。 這樣,我們可以控制模塊中元素的可訪問性。 ```vb Console.WriteLine(x) Console.WriteLine(Second.y) ``` 我們打印`x`和`y`變量。 它們是`Public`,可以從其他模塊訪問。 我們可以使用模塊名稱來完全指定變量名稱。 作用域是變量的可見性。 具有模塊作用域的變量在聲明了該模塊的模塊中可用。 ```vb Option Strict On Module Example Private x As Integer = 0 Sub Main() proc1() proc2() proc3() End Sub Sub proc1() Console.WriteLine(x) End Sub Sub proc2() x += 100 Console.WriteLine(x) End Sub Sub proc3() x += 100 Console.WriteLine(x) End Sub End Module ``` 我們在模塊內部有`x`變量。 該變量在所有三個過程中均可用。 ```vb Private x As Integer = 0 ``` 這是具有模塊作用域的變量。 它在任何過程外聲明。 ```vb Sub proc2() x += 100 Console.WriteLine(x) End Sub ``` 在`proc2()`過程中,我們增加了`x`變量并將其內容打印到控制臺。 我們引用模塊中定義的`x`變量。 ```vb $ ./modulescope.exe 0 100 200 ``` 示例的輸出。 ## 過程 過程為代碼項目提供了模塊化。 他們應該僅執行特定任務。 ```vb Option Strict On Module Example Dim x As Integer = 0 Sub Main() Console.WriteLine(x) proc1() proc2() proc3() End Sub Sub proc1() Dim x As Integer x += 100 Console.WriteLine(x) End Sub Sub proc2() Dim x As Integer x += 100 Console.WriteLine(x) End Sub Sub proc3() Dim x As Integer x += 100 Console.WriteLine(x) End Sub End Module ``` 在前面的代碼示例中,除主過程外,我們還有三個過程。 這三個過程創建一個本地`x`變量并將其打印到終端。 主要過程涉及模塊`x`變量。 ```vb Sub proc1() Dim x As Integer x += 100 Console.WriteLine(x) End Sub ``` `proc1()`過程創建一個本地`x`變量。 此變量遮蓋了,該變量在模塊作用域中聲明。 ```vb $ ./procedurescope.exe 0 100 100 100 ``` 主程序打印 0。其他程序打印 100 到終端。 他們創建其本地`x`變量,將其初始化為 0,然后增加 100。 ## 塊作用域 重要的是要理解在`If` / `End If`或`While` / `End While`之類的代碼塊中聲明的變量具有有限的塊作用域和生存期。 下一個示例對此進行了說明。 ```vb Option Strict On Module Example Sub Main() If True Console.WriteLine("Inside If block") Dim x As Integer = 0 Console.WriteLine(x) x += 500 Console.WriteLine(x) End If Console.WriteLine("Outside If block") Rem Will not compile Rem Console.WriteLine(x) End Sub End Module ``` 我們在`If` / `End If`塊內部聲明了一個`x`變量。 ```vb Rem Will not compile Rem Console.WriteLine(x) ``` 該變量在塊外部不可用。 如果我們取消注釋第二行,則該示例將無法編譯。 Visual Basic 教程的這一部分專門用于組織代碼。 我們提到了代碼的基本組織元素,例如名稱空間,模塊或過程。 我們描述了與這些要素密切相關的可變作用域和持續時間。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看