共用方式為


通用屬性 (Visual Basic)

本主題描述 Visual Basic 程式中最常使用的屬性。

全域屬性

大部分屬性都會套用至特定語言專案,例如類別或方法;不過,某些屬性是全域屬性,它們會套用至整個元件或模組。 例如, AssemblyVersionAttribute 屬性可用來將版本資訊內嵌至元件,如下所示:

<Assembly: AssemblyVersion("1.0.0.0")>

全域屬性會出現在任何最上層 Imports 語句之後的原始程式碼中,以及在任何類型、模組或命名空間宣告之前。 全域屬性可以出現在多個來源檔案中,但檔案必須在單一編譯階段中編譯。 針對 Visual Basic 專案,全域屬性通常會放在AssemblyInfo.vb檔案中(當您在 Visual Studio 中建立專案時,會自動建立檔案)。

元件屬性是提供元件相關信息的值。 它們分為下列類別:

  • 元件識別屬性

  • 資訊屬性

  • 元件指令清單屬性

元件識別屬性

三個屬性(如果適用的話,具有強名稱)會決定元件的身分識別:名稱、版本和文化特性。 這些屬性會形成元件的完整名稱,而且當您在程式代碼中參考元件時是必要的。 您可以使用屬性來設定元件的版本和文化特性。 不過,名稱值是在建立元件時,由編譯器、元件資訊對話方塊中的 Visual Studio IDE 或元件連結器(Al.exe)根據包含元件指令碼的檔案設定。 屬性 AssemblyFlagsAttribute 會指定元件的多個複本是否可以共存。

下表顯示身分識別屬性。

屬性 目標
AssemblyName 完整描述組件的識別。
AssemblyVersionAttribute 指定元件的版本。
AssemblyCultureAttribute 指定元件支援的文化特性。
AssemblyFlagsAttribute 指定元件是否支援在同一部計算機上、相同進程中,或在同一個應用程式域中並行執行。

資訊特性

您可以使用資訊屬性來提供組件的其他公司或產品資訊。 下表顯示命名空間中 System.Reflection 定義的參考屬性。

屬性 目標
AssemblyProductAttribute 定義一個自訂屬性,用於指定組件清單的產品名稱。
AssemblyTrademarkAttribute 定義自訂屬性,指定組件清單的商標。
AssemblyInformationalVersionAttribute 定義自訂屬性以指定組件清單的資訊版本。
AssemblyCompanyAttribute 定義自訂屬性,指定組件描述檔的公司名稱。
AssemblyCopyrightAttribute 定義一個自訂屬性,以指定組件清單的著作權。
AssemblyFileVersionAttribute 指示編譯程式使用 Win32 檔案版本資源的特定版本號碼。
CLSCompliantAttribute 指出元件是否符合 Common Language Specification (CLS) 規範。

元件指令清單屬性

您可以使用元件指令清單屬性來提供元件指令清單中的資訊。 這包括標題、描述、預設別名和組態。 下表顯示了在System.Reflection命名空間中定義的組件清單屬性。

屬性 目標
AssemblyTitleAttribute 定義自訂屬性,指定組件清單的組件標題。
AssemblyDescriptionAttribute 定義自訂屬性,指定元件指令清單的元件描述。
AssemblyConfigurationAttribute 定義自訂屬性,以指定組件清單中的組件配置(例如零售版或偵錯版)。
AssemblyDefaultAliasAttribute 定義組件清單的友好的預設別名

過時屬性

Obsolete 屬性會將程式實體標示為不建議再使用的。 標示為過時的實體每次使用都會產生警告或錯誤,視屬性的設定方式而定。 例如:

<System.Obsolete("use class B")>
Class A
    Sub Method()
    End Sub
End Class

Class B
    <System.Obsolete("use NewMethod", True)>
    Sub OldMethod()
    End Sub

    Sub NewMethod()
    End Sub
End Class

在此範例中, Obsolete 屬性會套用至 類別 A 和 方法 B.OldMethod。 因為套用至 B.OldMethod 的屬性建構函式的第二個自變數會設定為 true,這個方法會導致編譯程序錯誤,而使用 類別 A 只會產生警告。 不過,呼叫 B.NewMethod 不會產生任何警告或錯誤。

提供作為屬性建構函式第一個引數的字串將顯示為警告或錯誤的一部分。 例如,當您將它與先前的定義搭配使用時,下列程式碼會產生兩個警告和一個錯誤︰

' Generates 2 warnings:
' Dim a As New A
' Generate no errors or warnings:

Dim b As New B
b.NewMethod()

' Generates an error, terminating compilation:
' b.OldMethod()

會產生 A 類別的兩個警告︰一個用於宣告類別參考,一個則用於類別建構函式。

屬性 Obsolete 可以不使用參數,但建議包括為何此項目過時及應用何者取代的說明。

Obsolete 屬性是單次使用屬性,並且可以套用至任何允許屬性的實體。 ObsoleteObsoleteAttribute 的別名。

條件屬性

Conditional 屬性會根據前置處理識別碼來執行方法。 Conditional 屬性是 ConditionalAttribute 的別名,而且可以套用至方法或屬性類別。

在此範例中, Conditional 會套用至方法來啟用或停用程式特定診斷資訊的顯示:

#Const TRACE_ON = True
Imports System.Diagnostics

Module TestConditionalAttribute
    Public Class Trace
        <Conditional("TRACE_ON")>
        Public Shared Sub Msg(ByVal msg As String)
            Console.WriteLine(msg)
        End Sub

    End Class

    Sub Main()
        Trace.Msg("Now in Main...")
        Console.WriteLine("Done.")
    End Sub
End Module

TRACE_ON如果未定義標識碼,就不會顯示任何追蹤輸出。

屬性 Conditional 通常會與標識碼搭配 DEBUG 使用,以啟用偵錯組建的追蹤和記錄功能,但不在發行組建中,如下所示:

<Conditional("DEBUG")>
Shared Sub DebugMethod()

End Sub

呼叫標示為條件的方法時,指定的前置處理符號是否存在會決定呼叫是否包含或省略。 如果定義符號,則會包括呼叫;否則會省略呼叫。 使用 Conditional 是一種更簡潔、更優雅且較不容易出錯的替代方案,相較於將方法封裝在 #if…#endif 區塊中,如下所示:

#If DEBUG Then
    Sub ConditionalMethod()
    End Sub
#End If

條件式方法必須是類別或結構宣告中的方法,而且不能有傳回值。

使用多個標識碼

在至少定義其中一個條件符號的情況下,如果方法有多個 Conditional 屬性,將會包含對此方法的呼叫(換句話說,符號會使用 OR 運算符以邏輯方式連結在一起)。 在此範例中,當AB出現時,會導致方法呼叫:

<Conditional("A"), Conditional("B")>
Shared Sub DoIfAorB()

End Sub

若要使用 AND 運算符來達成邏輯連結符號的效果,您可以定義序列條件式方法。 例如,下列第二個方法只有在定義 AB 時才會執行:

<Conditional("A")>
Shared Sub DoIfA()
    DoIfAandB()
End Sub

<Conditional("B")>
Shared Sub DoIfAandB()
    ' Code to execute when both A and B are defined...
End Sub

在屬性類別中使用條件式

Conditional 屬性也可以套用至屬性類別定義。 在此範例中,自定義屬性 Documentation 只會在定義 DEBUG 時,將資訊新增至元數據。

<Conditional("DEBUG")>
Public Class Documentation
    Inherits System.Attribute
    Private text As String
    Sub New(ByVal doc_text As String)
        text = doc_text
    End Sub
End Class

Class SampleClass
    ' This attribute will only be included if DEBUG is defined.
    <Documentation("This method displays an integer.")>
    Shared Sub DoWork(ByVal i As Integer)
        System.Console.WriteLine(i)
    End Sub
End Class

呼叫端資訊屬性

藉由使用呼叫端資訊屬性,您可以取得方法呼叫端的相關信息。 您可以取得原始碼的檔案路徑、原始程式碼中的行號,以及呼叫者的成員名稱。

若要取得成員呼叫端資訊,您可以使用套用至選擇性參數的屬性。 每個選擇性參數都會指定預設值。 下表列出命名空間中 System.Runtime.CompilerServices 定義的呼叫端資訊屬性:

屬性 說明 類型
CallerFilePathAttribute 包含呼叫端之原始程序檔的完整路徑。 這是編譯時期的路徑。 String
CallerLineNumberAttribute 在來源檔案中呼叫方法的行號。 Integer
CallerMemberNameAttribute 呼叫者的方法名稱或屬性名稱。 如需詳細資訊,請參閱呼叫端資訊(Visual Basic)。 String
CallerArgumentExpressionAttribute 呼叫者用於參數的表達式。 如需詳細資訊,請參閱呼叫端資訊(Visual Basic)。 String

如需呼叫端資訊屬性的詳細資訊,請參閱 呼叫端資訊 (Visual Basic)

Visual Basic 屬性

下表列出 Visual Basic 特有的屬性。

屬性 目標
ComClassAttribute 向編譯程式指出類別應該公開為 COM 物件。
HideModuleNameAttribute 使用模組時,只需對模組進行必要的限定性即可存取其成員。
VBFixedStringAttribute 指定結構中固定長度字串的大小,以搭配檔案輸入和輸出函式使用。
VBFixedArrayAttribute 指定結構中固定陣列的大小,以供與檔案輸入輸出函式搭配使用。

COMClassAttribute

使用 COMClassAttribute 來簡化從 Visual Basic 建立 COM 元件的程式。 COM 物件與 .NET Framework 元件有很大的不同,而且不需要 COMClassAttribute,您必須遵循許多步驟,從 Visual Basic 產生 COM 物件。 對於標示 COMClassAttribute為的類別,編譯程式會自動執行許多這些步驟。

HideModuleNameAttribute

使用 HideModuleNameAttribute 來允許僅使用模組所需的資格來存取模組成員。

VBFixedStringAttribute

使用 VBFixedStringAttribute 強制 Visual Basic 建立固定長度字串。 字串預設為可變長度,而此屬性在將字串儲存至檔案時很有用。 下列程式代碼示範這一點:

Structure Worker
    ' The runtime uses VBFixedString to determine
    ' if the field should be written out as a fixed size.
    <VBFixedString(10)> Public LastName As String
    <VBFixedString(7)> Public Title As String
    <VBFixedString(2)> Public Rank As String
End Structure

VBFixedArrayAttribute(固定陣列屬性)

使用 VBFixedArrayAttribute 來宣告大小固定的陣列。 如同 Visual Basic 字串,陣列預設為可變長度。 串行化或將數據寫入檔案時,這個屬性很有用。

另請參閱