GetCustomAttributes方法

mizuho_2006 2011-03-23 07:57:46
public abstract object[] GetCustomAttributes(bool inherit);


这是GetCustomAttributes方法的一个重载,参数为bool类型
返回一个object数组,用以保存对象中的自定义属性(attribute)
参数为true时包括子类中的自定义属性
这是我的理解
可是具体用起来不太明白
比如下面一段代码

Book book = new Book(); //声明一个Book类的实例book
Type type = book.GetType(); //获取book实例的类型
TableAttribute tableAttribute = (TableAttribute)type.GetCustomAttributes(false)[0];

GetCustomAttributes方法为什么要用在type后面呢? 为什么要先获取book实例的类型?
这点我怎么也想不明白,求教各位前辈。。。
...全文
1299 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2011-03-23
  • 打赏
  • 举报
回复
typeof是关键字,只接受 Type。

你能写出 typeof(方法名) 的语句吗?编译都通不过。
mizuho_2006 2011-03-23
  • 打赏
  • 举报
回复
查了一下,Type类继承自MemberInfo类,而MemberInfo类实现了ICustomAttributeProvider接口
在这个接口中定义了GetCustomAttributes方法
怨不得可以使用Type.GetCustomAttributes这样的形式

但是我还有一点不太明白
想得到一个对象的attribute,只需要得到这个对象的类型就可以
那么一个方法的话,也可以 typeof(方法名).GetCustomAttributes()
而不通过MethodInfo也可以吗
要得到属性的Attribute 也可以 typeof(属性名).GetCustomAttributes()

是这样吗?
  • 打赏
  • 举报
回复
CustomAttributes需要定义在某一个具体的类型上才有效,target可以是类及其成员。
MSDN官方解释:在派生类中重写时,返回应用于此成员的所有自定义特性的数组。 (继承自 MemberInfo。)

Type.GetCustomAttributes 方法(System)
机器人 2011-03-23
  • 打赏
  • 举报
回复
你可以直接用 typeof ,但有些场景我们会用到实例。

但是,我们实际使用的时候,通常是为了通过GetCustomAttributes获得一些自定义的Attribute

比如:
class Book : BaseDTO
{
[PrimaryKey]
public string ID;
public string Name;
}

比如设计一个方法,检查DTO数据的存在性。
public void CheckExists(BaseDTO dto)
{
// 那么这里,你肯定不能用typeof了。你只能用dto.GetType() Type type = dto.GetType();
// 查找标有[PrimaryKey]特性的字段,然后查DB
...
}
shaofei830927 2011-03-23
  • 打赏
  • 举报
回复
typeof(Book).GetCustomAttributes(false)[0]
你要过的某个类的属性 不用实例化 只需要知道类型就可以了
所以GetCustomAttributes方法就理所当然的应当属于 Type 类型的对象喽
lunasea0_0 2011-03-23
  • 打赏
  • 举报
回复
这个是反射,通过类的类型来处理的。
324374 2011-03-23
  • 打赏
  • 举报
回复
这个方法源自ICustomAttributeProvider接口
查阅MSDN你就会发现Assembly,Type,MemberInfo这些类都继承这个接口,因此他们都有GetCustomAttributes方法。

因为Attribute不仅可以用在类上,集合,函数,参数都可以应用,所以要想得到一个类的Attribute,当然得通过Type了,要得到一个函数的Attribute,就得通过MethodInfo,属性的Attribute,就得通过PropertyInfo……
threenewbee 2011-03-23
  • 打赏
  • 举报
回复
不需要
Type type = typeof(Book);

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧