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实例的类型?
这点我怎么也想不明白,求教各位前辈

解决方案 »

  1.   

    不需要
    Type type = typeof(Book); 
      

  2.   

    这个方法源自ICustomAttributeProvider接口
    查阅MSDN你就会发现Assembly,Type,MemberInfo这些类都继承这个接口,因此他们都有GetCustomAttributes方法。因为Attribute不仅可以用在类上,集合,函数,参数都可以应用,所以要想得到一个类的Attribute,当然得通过Type了,要得到一个函数的Attribute,就得通过MethodInfo,属性的Attribute,就得通过PropertyInfo……
      

  3.   

    typeof(Book).GetCustomAttributes(false)[0]
    你要过的某个类的属性 不用实例化  只需要知道类型就可以了 
     所以GetCustomAttributes方法就理所当然的应当属于 Type 类型的对象喽
      

  4.   

    你可以直接用 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
        ...
    }
      

  5.   

    CustomAttributes需要定义在某一个具体的类型上才有效,target可以是类及其成员。
    MSDN官方解释:在派生类中重写时,返回应用于此成员的所有自定义特性的数组。 (继承自 MemberInfo。)Type.GetCustomAttributes 方法(System)
      

  6.   

    查了一下,Type类继承自MemberInfo类,而MemberInfo类实现了ICustomAttributeProvider接口
    在这个接口中定义了GetCustomAttributes方法
    怨不得可以使用Type.GetCustomAttributes这样的形式但是我还有一点不太明白
    想得到一个对象的attribute,只需要得到这个对象的类型就可以
    那么一个方法的话,也可以 typeof(方法名).GetCustomAttributes()
    而不通过MethodInfo也可以吗
    要得到属性的Attribute 也可以 typeof(属性名).GetCustomAttributes()是这样吗?
      

  7.   

    typeof是关键字,只接受 Type。你能写出 typeof(方法名) 的语句吗?编译都通不过。