下面這個是筆者在以前的乙個專案中用到的。當時是為了在匯出excel報表的時侯,通過自定義特性,包含一些可配置的特性在裡面。具體的操作excel不是本文重點,本文不會多做說明。下面只寫個示例,簡單說明一下如何通過反射獲取自定義特性。示例只在類和屬性上使用了自定義特性。讀者可以按照實際的專案需求,合理使用自定義特性。
1、實現實體自定義特性,繼承自attribute類
code
///
/// 自定義特性 屬性或者類可用 支援繼承
///
[attributeusage(attributetargets.property | attributetargets.class, inherited = true)]
private string tablename;
///
/// 實體實際對應的表名
///
public string tablename
get
set
private string columnname;
///
/// 中文列名
///
public string columnname
get
set
注釋中我已經寫的很清楚,自定義特性中的屬性乙個是實體實際對應的資料庫表名,乙個是對應的中文列名稱。
2、在實體中使用自定義特性
code
///
/// 會員 ,實際的表名叫memberinfo,並不是和實體名一致
///
public class member
private int id;
public int id
get
set
private string username;
public string username
get
set
private string realname;
public string realname
get
set
private bool isactive;
///
/// 是否活躍 沒有附加自定義屬性
///
public bool isactive
get
set
3、顯示自定義特性
code
class program
///
/// 通過反射取自定義屬性
///
///
private static void displayselfattribute() where t:class ,new()
string tablename = string.empty;
listlistcolumnname = new list();
type objtype = typeof(t);
//取屬性上的自定義特性
foreach (propertyinfo propinfo in objtype.getproperties())
if (objattrs.length>0)
if (attr != null)
listcolumnname.add(attr.columnname); //列名
//取類上的自定義特性
foreach (object obj in objs)
if (attr != null)
tablename = attr.tablename;//表名只有獲取一次
break;
if (string.isnullorempty(tablename))
tablename = objtype.name;
console.writeline(string.format("the tablename of the entity is: ", tablename));
if (listcolumnname.count > 0)
console.writeline("the columns of the table are as follows:");
foreach (string item in listcolumnname)
console.writeline(item);
static void main(string args)
displayselfattribute(); //顯示結果
console.readline();
ps:在獲取自定義特性的地方,其實就是利用了getcustomattributes方法,這個沒什麼好說的。在實際開發的時候,通過反射的特性可以省卻我們很多繁瑣的事情,真像那句話說的,「反射反射,程式設計師的快樂」。不過,反射的效能問題還是需要格外注意的,比如,今天上午看到老趙的「attribute操作的效能優化方式」才發現原來還有那麼多內涵。
c 通過反射獲取類上的自定義特性
cplayerinfo playerinfo new cplayerinfo datatable dt new datatable dt.columns.add 屬性名稱 typeof string dt.columns.add 屬性值 typeof string datarow dr null s...
c 通過反射獲取類上的自定義特性
下面這個是筆者在以前的乙個專案中用到的。當時是為了在匯出excel報表的時侯,通過自定義特性,包含一些可配置的特性在裡面。具體的操作excel不是本文重點,本文不會多做說明。下面只寫個示例,簡單說明一下如何通過反射獲取自定義特性。示例只在類和屬性上使用了自定義特性。讀者可以按照實際的專案需求,合理使...
c 通過反射獲取類上的自定義特性
下面這個是筆者在以前的乙個專案中用到的。當時是為了在匯出excel報表的時侯,通過自定義特性,包含一些可配置的特性在裡面。具體的操作excel不是本文重點,本文不會多做說明。下面只寫個示例,簡單說明一下如何通過反射獲取自定義特性。示例只在類和屬性上使用了自定義特性。讀者可以按照實際的專案需求,合理使...