文章地址:http://developer.51cto.com/art/200908/141545.htm引用里面的一句话如下:
2.这里有一个约定:所有自定义的特性名称都应该有个Attribute后缀。因为当你的Attribute施加到一个程序的元素上的时候,编译器先查找你的Attribute的定义,如果没有找到,那么它就会查找“Attribute名称"+Attribute的定义。如果都没有找到,那么编译器就报错。这就是为什么我可以再上面第一段代码中,定义一个VersionAttribute,但在第二段代码中,我使用却是Version这个Attribute。:>编译器先查找你的Attribute的定义,这句话的意思是指编译器先按Version这个名称去找下面这段代码吗?[AttributeUsage(AttributeTargets.Class)] 
public class VersionAttribute : Attribute  
{    
  public string Name { get; set; }     
  public string Date { get; set; }      
  public string Describtion { get; set; } 
 } 
如果没有找到,那么它就会查找“Attribute名称"+Attribute的定义.
我的理解:编译器先按Version去找肯定是找不到的因为这个类名为:VersionAttribute,然后它再根据Attribute名称"+Attribute去查找的?我感觉我理解有问题,不知道编译器是怎么查找的过程.

解决方案 »

  1.   

    自定义的Attribute必须直接或者间接地从Attribute类派生
    当编译器看到一个属性被附着给一个类型或成员时,它会搜索具有指定属性名的System.Attribute派生类。如果编译器没有找到匹配的类,它就在指定的属性名后面加上Attribute,然后再进行搜索。因此,常见的使用做法是将属性类名定义为以Attribute结尾,在使用时忽略名称的这一部分
      

  2.   


    哦!好像编译器多走一步哦,自定义属性在System.Attribute派生类肯定是找不到的.估计这个是为了查找你是否用了.net框架的属性吧
    自定义属性要加上Attribute才能找到的。。