日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

特性(摘要)

發(fā)布時間:2025/6/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 特性(摘要) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

特性(摘要)

特性(attribute),讓我們可以為代碼標記一些信息,而這樣的信息又可以從外部讀取,并通過各種方式來影響我們所定義的類型的使用方式。這種手段通常被稱為對代碼進行“裝飾(decorating)”。

舉例來說,比如我們要創(chuàng)建的某個類包含了一個極其簡單的方法(簡單到我們不必去理會他)。但在應用程序調試期間,可能還是不得不通過代碼的逐行檢查而調試它。在這種情況下,我們就可以對該方法添加一個特性,告訴VS在調試時不要進入該方法進行逐句調試,而是應該跳過該方法直接調試下一條語句。這樣的特性申明方式如下:

[DebuggerStepThrough] public void DullMethod() {... }

上述代碼中所包含的特性就是[DebuggerStepThrough]。所有特性的添加方式都是如此,也就是說只需將特性名稱用方括號括起來,并寫在要應用的目標代碼前面即可。并且可以為一段代碼添加多個特性,將這些特性用(,)分隔開,或者用多個方括號括起來每一個均可

上述代碼中所使用的特性實際上是通過DebuggerStepThroughAttribute這個類來實現的,而這個類位于System.Diagnostics名稱空間中,因此如果我們要使用上面那個特性,就必須使用using 語句來引用這一名稱空間。引用該特性既可以直接使用其完整名稱,也可以像前面的代碼那樣,去掉后綴Attribute。

通過上述方式添加特性后,編譯器就會創(chuàng)建該特性類的一個實例,然后將其與類方法關聯起來。某些特性可以通過構造函數的參數或屬性進行自定義,并在添加特性的時候進行指定,例如:

[DoesInterstingThings(1000,WhatDoesItDo="voodo")] public class DecoratedClass {... }

上述特性的值1000傳遞給了DoesInterestingThingsAttribute的構造函數,并將WhatDoesItDo屬性的值設置為字符串"voodoo"。

?

讀取特性:

要讀取特性,我么必須使用一種稱為“反射(reflection)“的技術。這種非常高級的技術讓我們可以在運行的時候動態(tài)檢查類型的信息,甚至是在創(chuàng)建對象的位置,或者在不必知道具體對象的情況下調用某個方法。

簡單來說,反射可以獲取保存在Type對象中的信息,以及通過System.Reflection名稱空間中的類型來獲取不同的類型信息。在此之前,我們已經通過typeof運算符從類中快速的獲取類型信息,以及使用GetType()方法從對象實例中獲取信息的方法。通過反射技術,我們可以繼續(xù)從Type對象獲取成員信息。基于這個方法,我們就可以從類或類的不同成員中獲取特性信息了。

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

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

Type classType = typeof(DecoratedClass); object[] customAttributes = classType.GetCustomAttribute(true); foreach(object customAttribute in customAttributes) {Console.WriteLine("Attribute of type {0} found.",customAttribute); }

通過這種方法了解了不同特性之后,我們就可以為不同的特性采取不同的操作了。這也正是當VS遇到前面介紹的DebuggerStepThroughAttribute特性時所采取的操作。

轉載于:https://www.cnblogs.com/SilentCode/p/4883944.html

總結

以上是生活随笔為你收集整理的特性(摘要)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。