屬性提供將元數據或宣告式資訊與程式代碼產生關聯的強大方法(元件、類型、方法、屬性等等)。 屬性與程式實體相關聯之後,可以使用稱為「反映」的技術,在運行時間查詢屬性。 如需詳細資訊,請參閱反映(Visual Basic)。
屬性具有下列屬性:
屬性會將元數據新增至您的程式。 元數據 是程式中所定義類型的相關信息。 所有 .NET 元件都包含一組指定的元數據,描述元件中定義的類型和類型成員。 您可以新增自訂屬性,以指定所需的任何其他資訊。 如需詳細資訊,請參閱 建立自訂屬性 (Visual Basic) 。
您可以將一或多個屬性套用至整個元件、模組或較小的程序專案,例如類別和屬性。
屬性可以接受與方法和屬性相同的引數。
您的程式可以使用反映來檢查自己的元數據或其他程式中的元數據。 如需詳細資訊,請參閱 使用反射存取屬性(Visual Basic)。
使用屬性
屬性可以放在大部分的任何宣告上,不過特定屬性可能會限制其有效宣告的類型。 在 Visual Basic 中,屬性會以角括弧括住 (<>)。 它必須緊接在套用至它的元素之前,出現在相同的行上。
在此範例中,會使用 SerializableAttribute 屬性將特定特性套用至類別:
<System.Serializable()> Public Class SampleClass
' Objects of this type can be serialized.
End Class
具有 屬性 DllImportAttribute 的方法宣告如下:
Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
您可以在宣告上放置多個屬性:
Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub
某些屬性可以針對指定的實體指定多次。 這類多重使用屬性的範例是 ConditionalAttribute:
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
備註
依照慣例,所有屬性名稱都會以 “Attribute” 一詞結尾,以區別它們與 .NET Framework 中的其他專案。 不過,在程式代碼中使用屬性時,您不需要指定屬性後綴。 例如, [DllImport]
相當於 [DllImportAttribute]
,但 DllImportAttribute
是 .NET Framework 中屬性的實際名稱。
屬性參數
許多屬性都有參數,可以是位置、未命名或具名。 任何位置參數都必須以特定順序指定,且無法省略;具名參數是選擇性的,可以依任何順序指定。 會先指定位置參數。 例如,這三個屬性相等:
<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>
第一個參數 DLL 名稱是位置性的,且始終位於第一;其他則是具名參數。 在此情況下,這兩個具名參數都會預設為 false,因此可以省略它們。 如需預設參數值的相關信息,請參閱個別屬性的檔。
屬性目標
屬性 的目標 是套用屬性的實體。 例如,屬性可以套用至類別、特定方法或整個元件。 根據預設,屬性會套用至它之前的元素。 但是,您也可以明確識別屬性是套用至方法,還是套用至其參數,或是套用至其傳回值。
若要明確識別屬性目標,請使用下列語法:
<target : attribute-list>
下表顯示可能的 target
值清單。
目標值 | 適用對象 |
---|---|
assembly |
整個組裝 |
module |
目前的元件模組(與 Visual Basic 模組不同) |
下列範例示範如何將屬性套用至元件和模組。 如需詳細資訊,請參閱 通用屬性 (Visual Basic) 。
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
屬性的常見用法
下列清單包含程式碼中屬性的一些常見用法:
使用 Web 服務中的
WebMethod
屬性標記方法,表示方法應該可透過 SOAP 通訊協定呼叫。 如需詳細資訊,請參閱WebMethodAttribute。描述如何在與原生代碼互通時封裝方法參數。 如需詳細資訊,請參閱MarshalAsAttribute。
描述類別、方法和介面的 COM 屬性。
使用 DllImportAttribute 類別呼叫非受控代碼。
在標題、版本、描述或商標方面描述您的軟體組件。
指定類別中的哪些成員需要被序列化以便持久化。
描述如何對應類別成員與 XML 節點以進行 XML 序列化。
描述方法的安全性需求。
指定用於強化安全性的特徵。
藉由即時編譯器 (JIT) 控制優化,讓程式碼保持易於偵錯。
取得方法呼叫端的相關信息。
相關區段
如需詳細資訊,請參閱: