Namespace 陳述式

宣告命名空間的名稱,並將要在該命名空間內編譯的原始程式碼置於宣告之後。

Namespace { name | name.name }
    [ componenttypes ]
End Namespace

組件

  • name
    必要項。 識別命名空間的唯一名稱。 必須是有效的 Visual Basic 識別項。 如需詳細資訊,請參閱宣告項目名稱 (Visual Basic)

  • componenttypes
    選擇項。 組成命名空間的項目。 這些項目包括 (但不限於) 列舉型別、結構、介面、類別、模組、委派和其他命名空間。

  • End Namespace
    結束 Namespace 區塊。

備註

命名空間是當做組織系統使用, 並且會提供方法以分類和呈現公開給其他程式和應用程式的程式設計項目。 請注意,就這種意義而言,命名空間不是類別或結構的「型別」。不可將程式設計項目宣告成具有命名空間的資料型別。

只有在檔案或命名空間層級才可以使用 Namespace 陳述式。 這表示命名空間的「宣告內容」必須是原始程式檔 (Source File) 或另一個命名空間,且不可以是類別、結構、模組、介面或程序。 如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)

命名空間被視為具有 Public 存取層級。 可從相同專案內、從參考該專案的其他專案和從該專案所建置的組件內的任何地方存取命名空間。

規則

  • 屬性(Attribute):不可將屬性套用至命名空間。 屬性會將資訊提供給組件的中繼資料 (Metadata),這對來源 Classifier (例如命名空間) 不具任何意義。

  • 修飾詞。(Modifier):不可將任何存取或程序修飾詞 (或其他任何修飾詞) 套用至命名空間。 因為它不是型別,所以這些修飾詞不具意義。

  • 巢狀:可以在另一個命名空間內宣告某個命名空間。 您可宣告的巢狀層級並沒有嚴格限制,但請記住,其他程式碼存取最內層命名空間中所宣告的項目時,它必須使用限定性條件字串,而該字串則包含在巢狀階層中的所有命名空間名稱。

行為

  • 存取層級在命名空間層級上宣告的程式設計項目 (表示在命名空間內,但不在其他任何項目內) 可具有 Public 或 Friend 的存取權限。 如果未指定,則這類項目的存取層級會預設使用 Friend。 可在命名空間層級宣告的項目包含類別、結構、模組、介面、列舉型別 (Enumeration) 和委派 (Delegate)。 如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)

  • 編譯在 Namespace 陳述式之後宣告的所有程式設計項目都屬於該命名空間。 除非 Visual Basic 遇到 End Namespace 陳述式或另一個 Namespace 陳述式,否則它會繼續將項目編譯至最後宣告的命名空間。

  • 加入至命名空間:如果已定義命名空間 (即使是在專案外部),仍可加入程式設計項目至這個命名空間中。 若要這樣做,可使用 Namespace 陳述式指示 Visual Basic 將下列項目編譯至該命名空間。

    下列範例定義新泛型清單類別的基本架構,並將它加入至 System.Collections.Generic 命名空間。

    Namespace System.Collections.Generic
        Class specialSortedList(Of T)
            Inherits List(Of T)
            ' Insert code to define the special generic list class.
        End Class
    End Namespace
    
  • 根命名空間專案中的所有命名空間名稱都是依據「根命名空間」(Root Namespace) 而命名。 Visual Studio 會根據專案內的所有程式碼,將專案名稱指定為預設根命名空間的名稱。 例如,如果專案已命名為 Payroll,則它的程式設計項目會屬於命名空間 Payroll。 如果宣告 Namespace funding,則該命名空間的完整名稱是 Payroll.funding。

    如果想要在 Namespace 陳述式中指定現有的命名空間 (例如在泛型清單類別範例中),可以將根命名空間設定成 null 值。 若要執行這項作業,請按一下 [專案] 功能表中的 [專案屬性],再清除 [根命名空間] 項目,讓方塊空白。 如果在泛型清單類別範例中不這樣做,則 Visual Basic 編譯器會將 System.Collections.Generic 當做專案 Payroll 內的新命名空間,而這個命名空間的完整名稱則為 Payroll.System.Collections.Generic。

    或者可以使用 Global 關鍵字,以參考在專案外部定義的命名空間項目。 這樣做可以讓您保留專案名稱做為根命名空間的名稱。 這會減少意外合併程式設計項目與現有命名空間之程式設計項目的機會。

疑難排解

  • 未定義的型別:根命名空間會導致未預期的命名空間名稱串連。 如果參考定義在專案外部的命名空間,則 Visual Basic 編譯器會將它們當做是根命名空間內的巢狀命名空間。 在這類情況下,編譯器無法辨識已定義在外部命名空間中的任何型別。 若要防止發生此狀況,請如「根命名空間」中所述將根命名空間設定成 null 值,或使用 Global 關鍵字,存取外部命名空間的項目。

範例

下列範例會宣告兩個命名空間,其中一個會巢狀於另一個命名空間內。

Namespace n1
    Namespace n2
        Class a
            ' Insert class definition.
        End Class
    End Namespace
End Namespace

下列範例會在單行中宣告多個巢狀命名空間,這與上面的範例相同。

Namespace n1.n2
    Class a
        ' Insert class definition.
    End Class
End Namespace

下列範例會存取在上面範例中所定義的類別。

Dim instance As New n1.n2.a

請參閱

參考

Imports 陳述式 (.NET 命名空間和型別)

概念

宣告項目名稱 (Visual Basic)

Visual Basic 中的命名空間