位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 讀取特性

提問人:劉團(tuán)圓發(fā)布時間:2020-12-08

    要讀取特性的值,我們必須使用一種稱為“反射(reflection)”的技術(shù)。這種非常高級的技術(shù)讓我們可以在運(yùn)行的時候動態(tài)檢査類型信息,甚至是在創(chuàng)建對象的位置,或者在不必知道具體對象的情況下直接調(diào)用某個方法。在使用特性之前,需要了解該技術(shù)的一些基本知識。有關(guān)該技術(shù)的更多信息,可以訪問 https://docs.microsoft.com/eii-us/dotnet/framework/reflection-and-codedom/reflection。

    簡單來說,反射可以取得保存在Type對象(本書中會多次提到該對象)中的使用信息,以及通過System.Reflection名稱空間中的各種類型來獲取不同的類型信息。在此之前,我們己經(jīng)了解過通過typeof運(yùn)算符從類中快速獲取類型信息,以及使用GetType()方法從對象實(shí)例中獲取信息的方法。通過反射技術(shù),我們可繼續(xù)從Type對象取得成員信息。基于這個方法,我們就可以從類或類的不同成員中取得特性信息了。

    為此,最簡單的方法即通過Type.GetCustomAttributes()方法來實(shí)現(xiàn)。這個方法最多使用兩個參數(shù),然后返回一個包含一系列object實(shí)例的數(shù)組,每個實(shí)例都是一個特性實(shí)例。第一個參數(shù)是可選的,即傳遞我們感興趣的類型或若干特性的類型(其他所有特性均會被忽略)。如果不使用這—參數(shù),將返回所有特性。第二個參數(shù)是必需的,即通過一個布爾值來指示,只想了解類本身的信息,還是除了該類之外還希望了解派生自該類的所有類。


例如,下面的代碼可以列出DecoratedClass類的特性:

Type classType = typeof(DecoratedClass);

object[] customAttributes = classType.GetCustomAttributes(true);

foreach (object customAttribute in customAttributes)

{

    WriteLine($"Attribute of type {customAttribute} found.");

}

通過這種方法了解到不同的特性后,我們就可以為不同的特性采取不同的操作了。這也正是當(dāng)Visual Studio遇到前面介紹的DebuggerStepThroughAttribute特性時所執(zhí)行的操作。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部