以下是學習筆記:
泛型:把型別做到通用,最終目的是可以動態程式設計
反射:讀取dll檔案描述資訊的乙個類庫
特性:貼標籤,貼上標籤後就產生了新的功能
特性:1,是乙個類。2,繼承自attribute。滿足這2個就是特性。
目前哪些地方是使用到了特性:幾乎所有的框架都用到了,mvc,webapi, ef,ioc,aop
特性使用場景:資料驗證,授權
1,資料驗證:
舉例1:
說明:[required]:這個屬性不能為空,不輸入值就報錯
[disaply(name=「電子郵件」)]:這個屬性自動顯示名字:「電子郵件」
舉例2:
說明:舉例3:
說明:還能指定資料型別
2,授權
說明:
這是乙個授權的,標註了這個屬性【authorize】,下面的這個方法才能用。
1,系統自帶特性
[debuggerstepthrough]:不讓除錯
[obsolete]:已過時的
有一些是影響到了編譯器的執行
2,自定義的
舉例:系統自帶的特性
#region 系統自帶的特性[obsolete("這個方法過時了,使用newmedthod代替",false)]//obsolete用來表示乙個方法被棄用了,引數1是字串提示的,引數2,true或false(true是錯誤,false是警告)
//如果引數2是true ,執行 oldmedthod()就報錯啦
static void oldmedthod()
static void newmedthod()
[conditional("istest")]//conditional特性,這個方法不會被呼叫了。#define istest//定義了乙個巨集,在using前面加這一行,就可以繼續使用
static void test1()
static void test2()
[debuggerstepthrough]//可以掉過debugger的單步除錯,不讓進入該方法(當我們確定這個方法沒有任何錯誤的時候可以使用這個特性)
要把defidattribute看出是乙個普通的類,裡面可以寫字段,方法,屬性,,,
1,建立特性:
//自定義attribute2,特性呼叫:[attributeusage(attributetargets.class,allowmultiple=false,inherited=false)]
//引數1:可以被哪些情況下使用,如果是all就是被所有情況下都可以用。
//引數2:是否可以放多次
//引數3:是否被繼承
public class helpattribute:attribute
public string description}}
//呼叫自定義的attribute
//[help("this is a do-nothing class")]//呼叫特性方法1:
[helpattribute("this is a do-nothing class")]//呼叫特性方法2:寫上全稱也可以
public class anyclass
#region 通過反射來獲取attribute中的資訊結果:anyclas description:this is a do-nothing classconsole.writeline("------------通過反射來獲取attribute中的資訊-------------");
helpattribute helpattribute;
foreach (var item in typeof(anyclass).getcustomattributes(true))
", helpattribute.description);}}
#endregion
c 特性基礎
特點 特性典型的aop程式設計思想,可以在不破壞封裝的前提下,動態增加功能,額外資訊,是乙個類,可以標記在別的元素上面,標記後對編譯 執行其實都沒有影響,只是生成了一些內部的元素,普通的方式找不到但可以通過反射來獲取並使用 特性對於程式來說一切都是假象,程式編寫中無法訪問到,對程式也沒影響,我們通過...
C 基礎之特性
使用特性,可以有效地將元資料或宣告性資訊與 程式集 型別 方法 屬性等 相關聯。將特性與程式實體相關聯後,可以在執行時使用反射這項技術查詢特性 system.attributeusage system.attributetargets.class system.attributetargets.st...
c 基礎知識 特性
特性 attribute 是用於在執行時傳遞程式中各種元素 比如類 方法 結構 列舉 元件等 的行為資訊的宣告性標籤。您可以通過使用特性向程式新增宣告性資訊。乙個宣告性標籤是通過放置在它所應用的元素前面的方括號 來描述的。特性 attribute 用於新增元資料,如編譯器指令和注釋 描述 方法 類等...