首页 / C# / C# Attribute+反射的威力
C# Attribute+反射的威力
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# Attribute+反射的威力,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1947字,纯文字阅读大概需要3分钟。
内容图文
![C# Attribute+反射的威力](/upload/InfoBanner/zyjiaocheng/837/5bdade3c481743ecb039631b8c8e9322.jpg)
先说说Attribute这个东西。
这次做需求第一次用,查找相关资料看的一脸懵逼,吐槽一手,这么简单的东西为啥要介绍的那么复杂。
Attribute叫特性,但是个人感觉把它当成标签理解更舒服点。
首先他是一个类,一个继承自System.Attribute的类。
他以[Attribute()]的形式标注在类啊,枚举啊,属性啊,方法之类上面,具体适用的对象:
[Attribute()]括弧就是这个Attribute的构造函数。
用法说完了,再说说它的作用:
先举个官方的例子,最后再说一个这次我自己用到的实例。
1、obsolete(预定义)
升级过U3D版本并且处理过Warning的同学应该对这个印象比较深刻,U3D在版本升级时通常会修改很多api(改名字或者改调用方式之类的),这时候它会用Warning告诉你,你这个api是旧的,新的要怎么怎么调。这个就是通过obsolete这个预定义的Attribute做的。
在每个方法里写LOG当然也可以实现,但是为了保持前端的一致性(比如来了新人),做该功能的人只需要在老api上加上这个“标签”就好了(后面就继续叫标签了,觉得这么理解舒服)。
2、自定义的Attribute
假如现在你手里有一堆对象,这些对象的类型不同,而且也没有共同的基类,但是它们有一个特点:这些类都实现了同一个接口。需求是,在某个地方调用这些对象的接口中的方法。
这就是Attribute登场的时候,自定义一个Attribute,给所有类实现这个方法的地方“贴上”咱们自定义的标签(在接口里贴不好使,查了官方文档,必须在具体实现的位置贴。。。),然后再调用的地方,通过反射筛选这些类的标签,然后再调用这个方法就好啦。
List<object> list = new List<object>();
MyManager myManager = new MyManager();
MineManager mineManager = new MineManager();
list.Add(myManager);
list.Add(mineManager);
假设MyManager和MineManager都实现了同一个接口,这个接口里有个Add()方法,这两个都实现了该方法,并且用MyAttribute标记过。
我们手里是List<object>队里,里面装了这两个类型的对象。
我们需要通过反射,拿到这些类中的方法信息,然后再调用这些对象的该方法即可。
for(int i = 0;i < list.Count;i++)
{
System.Reflection.MethodInfo methodInfo = list[i].GetType().GetMethod("Add");
methodInfo.Invoke(list[i],null);
}
遍历该队列,拿到每个对象的Type,然后获取里面的Add()方法,再条用该方法(Invoke不会使用的话看之前的帖子有介绍)。
内容总结
以上是互联网集市为您收集整理的C# Attribute+反射的威力全部内容,希望文章能够帮你解决C# Attribute+反射的威力所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。