不是很明白自定义属性

xrbeck 2005-12-28 09:04:15
关于自定义属性看了一下,是附加在类,或者方法上的一些自定义的东西,可以通过反射来得到属性值,但是这样的话,跟设计一个类的属性有什么区别,类也完全可以提供一些接口、属性来使得类本身有些定制的功能,为什么还要搞的那么复杂,用反射来解决?谢谢大家
...全文
218 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xrbeck 2006-01-08
  • 打赏
  • 举报
回复
我顶。
Ivony 2006-01-05
  • 打赏
  • 举报
回复
一般来说还是很少用。
只要明白它是干什么的就好了,其实就是贴标签的,用于动态编程。
xrbeck 2006-01-04
  • 打赏
  • 举报
回复
是的,但是这个一般用contional比较合适,跟自定义没啥关系,另外“Obsolete"也不是不支持,只不过给个编译提示信息而已。
lidong6 2006-01-04
  • 打赏
  • 举报
回复
我一般在设置控件时用的比较多,比如某个属性要不要显示在属性栏里,默认值是什么,属于哪个分组.
xrbeck 2006-01-02
  • 打赏
  • 举报
回复
对,在某些类需要做些标志性的LOG的时候,属性比较方便,就好比NUNIT,在需要测试的方法前加个TEST即可,但不知道自己设计的一般场景有些什么。。我觉得要的确是比较有用的,而不是为了用而去用,就好比模式,滥用模式还不如不用模式,所以想问问大家一般都用在什么地方,可否举几个例子,谢谢
runrunrun 2006-01-01
  • 打赏
  • 举报
回复
to xrbeck(ALEK) : 我可以给你举个最简单的例子, .net 里提供了 Obsolete 属性用来标识一个类被废弃。如果没有这个属性,编译器不得不维护一个所有被废弃的类的列表,而且还无法处理用户自定义的废弃类。 现在有了这个属性,框架的作者如果觉得哪个类在下个版本中不再被支持,只要给这个类加上Obsolete属性就可以了
xrbeck 2005-12-31
  • 打赏
  • 举报
回复
第一位楼主的那个例子看了一下,觉得也没啥区别啊,第一种方式是以静态的方法提供,第二种是把这种SWITCH语句从静态方法中挪到ATTRIBUTE类中,不都一样?有啥区别?要改还不都得改?好像没有回答出attribute得真正优越的地方。。
我想第一个解耦可能是个比较特别的地方,的确,就好像NUNIT,要测试的方法只要定义个ATTRIBUTE即可,而测试跟类本身是没什么关系的。这个好像是个比较突出的地方。但是实际上还是可以通过引入一个测试的接口来实现。。
xrbeck 2005-12-31
  • 打赏
  • 举报
回复
“这个东西本来就不属于这个类,只是会影响到类的行为或者执行的方式,如果加到类中,就会造成混淆,耦合性就增强“ =》这个我觉得好像也不是很合理,同样的,我是在一个框架中,为某些上层的或者客户端程序调用,我以attribute的方式提供,代码在框架中,通过反射来得到一些指定的信息,然后做出一些处理,跟我在框架中定义一个接口,给上层使用有什么区别?更改都是在框架中,不涉及到应用。所以还是不大明白。。
xrbeck 2005-12-31
  • 打赏
  • 举报
回复
我觉得楼上的论据站不住脚, if( obj.GetType() == typeof(ClassA) ) ... 不友好,问题是要不要写?写了attribute就不用写这段了吗,一样的,只不过是在框架的某个类中写还是在attribute类中,而且都只写一次,我看不出有什么优越的地方。。
alesso 2005-12-31
  • 打赏
  • 举报
回复
楼主可以去看看“ASP.NET组件设计”这本书
runrunrun 2005-12-31
  • 打赏
  • 举报
回复
attribute 主要是给框架和类库使用的。当你自己设计一个类库时,你就会明白attribute的强大了。

打个比方说,你的类库里需要对 ClassA 和 ClassB 的对象做一些不同的处理, 你当然可以写死: if( obj.GetType() == typeof(ClassA) ) ... ,但这是一种很不好的方法。给不同类赋予Attribute无疑是一种好的解决方案
qwerttyy 2005-12-31
  • 打赏
  • 举报
回复
简单说来,类里属性是经常用的,Attribute是不经常用的,或者是特殊要求。这就是区别。
xrbeck 2005-12-31
  • 打赏
  • 举报
回复
还是不是很明白,比如设计了一个LOG attribute,
可以在需要的地方加上这个属性,从而可以把某些
地方自动加LOG,但是这样的话,我提供一个LOG类,
给客户端程序调用不就可以了吗,为啥要用attribute,
各位能不能举两个例子。。
ghchen 2005-12-30
  • 打赏
  • 举报
回复
这个东西本来就不属于这个类,只是会影响到类的行为或者执行的方式,如果加到类中,就会造成混淆,耦合性就增强
alesso 2005-12-30
  • 打赏
  • 举报
回复
Attribute就相当于用不干胶给类或者method贴个标签,让底层框架或者VS设计器来读取信息
而且贴这个Attribute不影响类或method本身
alesso 2005-12-30
  • 打赏
  • 举报
回复
就好比一台电视机的控制器
每个按钮实现一些功能,好比method或者property
但如果电视机要包含“维修电话”这个信息
你是希望设计成一个按钮,按一下把电话号码显示在荧光屏上
还是直接用不干胶在电视机上贴个标签?
aspczlover 2005-12-30
  • 打赏
  • 举报
回复
不要搞那么多理论 要考虑实用性
timiil 2005-12-29
  • 打赏
  • 举报
回复
Attribute好比标签,通过反射获取对象上的标签,可以实现某些特定的功能,并且保持较低的耦合性
机器人 2005-12-28
  • 打赏
  • 举报
回复
property称之为属性,Attribute称之为特性。我们通过自定义特性可以扩展元数据。
http://blog.csdn.net/fangxinggood/archive/2005/10/30/519547.aspx

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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