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实例的类型?
这点我怎么也想不明白,求教各位前辈
这是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实例的类型?
这点我怎么也想不明白,求教各位前辈
Type type = typeof(Book);
查阅MSDN你就会发现Assembly,Type,MemberInfo这些类都继承这个接口,因此他们都有GetCustomAttributes方法。因为Attribute不仅可以用在类上,集合,函数,参数都可以应用,所以要想得到一个类的Attribute,当然得通过Type了,要得到一个函数的Attribute,就得通过MethodInfo,属性的Attribute,就得通过PropertyInfo……
你要过的某个类的属性 不用实例化 只需要知道类型就可以了
所以GetCustomAttributes方法就理所当然的应当属于 Type 类型的对象喽
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
...
}
MSDN官方解释:在派生类中重写时,返回应用于此成员的所有自定义特性的数组。 (继承自 MemberInfo。)Type.GetCustomAttributes 方法(System)
在这个接口中定义了GetCustomAttributes方法
怨不得可以使用Type.GetCustomAttributes这样的形式但是我还有一点不太明白
想得到一个对象的attribute,只需要得到这个对象的类型就可以
那么一个方法的话,也可以 typeof(方法名).GetCustomAttributes()
而不通过MethodInfo也可以吗
要得到属性的Attribute 也可以 typeof(属性名).GetCustomAttributes()是这样吗?