有幾個地方需要明確:
特性是類的例項,特性依賴於反射
特性繼承自system.attribute。命名以attribute結尾(非強制要求,只是乙個約定),應用特性時可省略attribute
所有非抽象特性至少包含乙個公共構造器,且應用特性時的引數必須與特性構造器引數相同
特性之所以會生效,是因為**中會檢測是否應用了特性,並根據是否應用了特性來採取不同的演算法
[attributeusage(attributetargets.class, allowmultiple = true)]//特性使用設定,特性應用於類,允許應用多次
public
sealed
class directorattribute : attribute, icomparable//繼承自attribute基類,且命名以attribute結尾
public
int priority }
public
string method }
public
intcompareto(directorattribute attribute)
}public
class director
array.sort(directors);
foreach(directorattribute attribute in directors)
}private
void
invokebuildpartmethod(iattributedbuilder builder,directorattribute attribute)}}
//應用特性,引數必須和特性的建構函式一致
[director(1, "buildpartb")]
[director(2, "buildparta")]
public
class attributebuilder : iattributedbuilder
public
void
buildpartc()
}public
class direcotrtest
}
以下內容節選字相關書籍或部落格(包括翻譯)
應將特性想象成邏輯狀態器。也就是說,雖然特性型別是乙個類,但這個類應該很簡單。應該只提供乙個公共構造器來接受特性的強制性(或定位性)狀態資訊,而且這個類科研提供公共欄位和屬性,以接受特性的可選(或命名)狀態資訊。類不應提供任何公共方法、事件或其他成員。
特性是類的例項,被序列化成駐留在原資料中的位元組流。執行時可對元資料中的位元組進行反序列化,從而構造出類的例項。實際發生的事情是:編譯器在元資料中生成建立特性類的例項所需的資訊。每個構造器引數都是1位元組的型別id,後跟具體的值。對構造器的引數進行「序列化」時,編譯器先寫入字段/屬性名稱,再跟上1位元組的型別id,最後是具體的值。如果是陣列,則會先儲存陣列元素的個數,再跟上每個單獨的元素。
僅僅定義特性類沒有用。確實可以定義自己想要的所有特性類,並應用自己想要的所有例項。但這一處了再程式集中生成額外的元資料,沒有其他任何意義。應用程式**的行為不會有任何改變。
以應用了flags特性的enum類為例,方法的行為之所以改變,是因為它們會在執行時檢查自己操作的列舉型別是否關聯了flags特性元資料。**利用一種稱為反射的技術檢測特性的存在。
特性生效是要在某個類的方法中新增額外**的。方法要使用isdefined,getcustomattributes,getcustomattribute方法來查詢所應用的特性,並執行不同的**分支。
檢測定製特定時,不建立從attribute派生的物件
可用system.reflection.customattributedata類在查詢特性的同時禁止執行特性類中的**。
Hbase的基本特性及工作機制
hbase是一種nosql資料庫,是一種分布式資料庫系統,可以提供資料的實時隨機讀寫 資料的增刪改查模組是基於分布式系統的 hbase資料庫與關係型資料庫不一樣 關係型資料庫的表結構是欄位名,下面儲存的是字段值,而hbase資料庫沒有這些,hbase的表結構是rowkey 行鍵 行鍵下面是key v...
pthread cond wait的工作機制
了解 pthread cond wait 的作用非常重要 它是 posix 執行緒訊號傳送系統的核心,也是最難以理解的部分。鎖定互斥物件時,執行緒將呼叫 pthread cond wait mycond,mymutex pthread cond wait 呼叫相當複雜,因此我們每次只執行它的乙個操作...
ElasticSearch的工作機制
elasticsearch,和solr一樣,是底層基於apache lucene,且具備高可靠性的企業級搜尋引擎。elasticsearch中的一些概念其實和關係型資料庫都有對應關係,比如資料庫在es中被稱為索引,表在es中被稱作type。具體對應關係見下表。elasticsearch中的repli...