看了Attribute与Property区别的一个疑惑

zzxxzzooo 2009-10-04 01:56:02
文章地址: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去查找的?

我感觉我理解有问题,不知道编译器是怎么查找的过程.
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxxzzooo 2009-10-08
  • 打赏
  • 举报
回复
谢谢.
zzxxzzooo 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
自定义的Attribute必须直接或者间接地从Attribute类派生
当编译器看到一个属性被附着给一个类型或成员时,它会搜索具有指定属性名的System.Attribute派生类。如果编译器没有找到匹配的类,它就在指定的属性名后面加上Attribute,然后再进行搜索。因此,常见的使用做法是将属性类名定义为以Attribute结尾,在使用时忽略名称的这一部分

[/Quote]

哦!好像编译器多走一步哦,自定义属性在System.Attribute派生类肯定是找不到的.估计这个是为了查找你是否用了.net框架的属性吧
自定义属性要加上Attribute才能找到的。。
wuyq11 2009-10-04
  • 打赏
  • 举报
回复
自定义的Attribute必须直接或者间接地从Attribute类派生
当编译器看到一个属性被附着给一个类型或成员时,它会搜索具有指定属性名的System.Attribute派生类。如果编译器没有找到匹配的类,它就在指定的属性名后面加上Attribute,然后再进行搜索。因此,常见的使用做法是将属性类名定义为以Attribute结尾,在使用时忽略名称的这一部分

110,529

社区成员

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

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

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