最近,專案經理要求我做乙個記錄日誌的功能,就是當系統的當前使用者進行增刪改或者上傳檔案操作的時候,進行對操作人,操作,操作時間的記錄。他的建議是用特性去實現該功能。
attribute的基本概念
首先,我們肯定attribute是乙個類,下面是msdn文件對它的描述:公共語言執行時允許你新增類似關鍵字的描述宣告,叫做attributes, 它對程式中的元素進行標註,如型別、字段、方法和屬性等。
attributes和microsoft .net framework檔案的元資料儲存在一起,可以用來向執行時描述你的**,或者在程式執行的時候影響應用程式的行為。
在.net中,attribute被用來處理多種問題,比如序列化、程式的安全特徵、防止即時編譯器對程式**進行優化從而**容易除錯等等。
複雜的,面向元件的業務開發,期待現代的軟體開發工程師們具備更多的彈性設計,而不是過去的方法設計。微軟的.net框架通過眾所周知的宣告式程式設計,廣泛的使用特性來附加額外的功能。在軟體系統裡,使用特性可以增強系統的彈性,這是因為,特性使功能的低耦合得到了增強。所以,你可以定製自己的特性類,然後根據你自己的意圖,合理的使用這些具有低耦合功效的特性。
使用.net框架編寫windows程式,在很多方面已經變得很簡單。在許多情況下,.net框架使用.net編譯器,在編譯時繫結到程式集的元資料,使靈活的程式設計變得更容易。事實上,對於.net而言,使用內嵌的元資料把我們從dll地獄解脫出來是可能的。
把元資料繫結到可執行的程式集裡,提供了許多優勢。這使得.net程式集,完全可以自我描述。還允許開發者跨語言共享元件,去除了標頭檔案的需要。(這些標頭檔案會由於相關的實現**而過期。)
關於.net元資料所有好的地方,看起來很難讓人相信,它好像沒什麼用,僅僅是個謊言。但是,它確實是存在的。在.net裡,你可以建立自己特定程式的元資料,並且可以把這些元資料應用到你可以想象到的地方。
開發者通過使用自定義特性,可以定義他們自己特定程式的元資料。因為這些特性的值將變成另一部分元資料,繫結到乙個程式集裡。所以這些自定義特性的值可以被反射api檢查到並且可以被使用。
首先,我們先定義乙個特性類,這個特性類繼承於attribute,再在它的建構函式裡面實現記錄日誌的方法
publicclass
logattribute:attribute
}
然後,我們在要實現記錄日誌功能的方法頭上加入該特性,並傳入正確的引數
//////新增
/// ///
[logattribute("
新增了一條資料
",datetime.now)]
public actionresult addarchivesfile(string archivesid, string
projectcode)
這樣,在新增資料之前,就對操作人,操作,操作時間進行了記錄,但是有個麻煩的地方就是要在每乙個需要記錄的方法前面都加入該特性。
自定義QTextEdit實現拖拽功能
qtextedit是乙個可以顯示各種複雜型別資訊的控制項,比如文字資訊,html等,有時作為輸入框我們需要實現拖拽展示或傳送一些檔案等,而如果要實現拖拽傳送檔案,這個時候需要過載dropevent事件和insertfrommimedata 函式,在使用這兩個函式的過程中,發現拖拽檔案時,source...
Cesium實現自定義標籤功能
實現的底層邏輯和方法跟實現popup彈窗功能類似,只需要修改對應的建立的html內容和css樣式,即可定義出更好看的標籤。實現效果 原始碼labelplot 標籤類 const defaultnamefield label const defaultidfield id const billboar...
利用反射實現自定義比較器
解決方案 優化空間 問題背景 需求 從第三方獲取資料列表,傳到前台進行展示,目前前台需要可以根據任意字段進行排序 公升序和降序 但是第三方介面不支援排序功能,所以需要手動實現資料的排序。問題分析 方案一 資料入庫 方案二 根據字段進行排序 解決方案 思路資料列表的排序主要是針對欄位的比較器進行的,那...