c 通過反射獲取類上的自定義特性

2022-07-28 05:00:17 字數 2429 閱讀 1342

下面這個是筆者在以前的乙個專案中用到的。當時是為了在匯出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不是本文重點,本文不會多做說明。下面只寫個示例,簡單說明一下如何通過反射獲取自定義特性。示例只在類和屬性上使用了自定義特性。讀者可以按照實際的專案需求,合理使...