C 特性和反射的應用(一)

2022-02-19 13:44:15 字數 1308 閱讀 1840

之前的專案使用了乙個輕量級的開源orm框架fluentdata,因為專案中領域模型和實體模型合在一起,新增資料時就會出現因為實體和資料庫表對應有差異而不能直接儲存(某些實體的屬性在資料庫表裡沒有對應的字段)。通過檢視fluentdata的源**,發現可以給實體裡面無法對應資料庫表字段的屬性新增乙個自定義特性,然後修改fluentdata源**,通過反射,把這些屬性「遮蔽」。

首先新建乙個自定義特性類dbfieldattribute,**如下:

[attributeusage(attributetargets.property)]

public

class

dbfieldattribute : attribute

public dbfieldattribute(bool

isdbfield)

private

bool

_isdbfield;

public

virtual

bool isdbfield set }

}

dbfieldattribute自定義特性類建立好之後在實體屬性上面加上這個自定義特性

///

///操作員單位

/// [description("

操作員單位")]

public

string ria100

//////

附件路徑1

/// [dbfield(false

)]

public

string att01

//////

附件路徑2

/// [dbfield(false

)]

public

string att02

自定義的特性類使用的時候可以把類名裡的attribute省略到。

[dbfield(false)]

然後修改fluentdata源**如下

internal

void automapcolumnsaction(params expressionobject>> ignorepropertyexpressions)

}foreach (var property in

properties)

}

這裡getcustomattributes方法是返回乙個包含所有自定義特性的陣列,然後判斷這個屬性是否包含dbfieldattribute自定義特性,並且isdbfield的值為false。

C 反射特性 一)

using system using system.collections.generic using system.linq using system.text using system.reflection namespace reflectionexam set private string ...

反射簡介 C 特性和反射

net編譯器的任務之一就是為所有定義和引用的型別生成元資料描述。除了程式集中標準的元資料外,net平台還支援特定 attribute 把更多的元資料嵌入到程式集中。net特性擴充套件了抽象的system.attribute基類,net中有很多預定義的特性,例如 dllimport obsolete ...

C 中特性的應用(一)

一 特性的基本概述 attribute 特性 公共語言執行時允許新增類似關鍵字的描述宣告,叫做attributes,它對程式中的元素進行標註,如型別 字段 方法和屬性等。attributes和microsoft net framework檔案的元資料儲存在一起,可以用來向執行時描述你的 或者在程式執...