首页 / C# / 详解C#特性和反射(三)
详解C#特性和反射(三)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了详解C#特性和反射(三),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2714字,纯文字阅读大概需要4分钟。
内容图文
![详解C#特性和反射(三)](/upload/InfoBanner/zyjiaocheng/855/566b48fd252341d992a25bf7be2a7b05.jpg)
类型信息(Type Information)用来表示类型声明的信息,通过抽象基类System.Type的实例存储这些信息,当使用反射时,CLR获取指定类型的Type对象,通过这个对象即可访问该类型的任何信息,是反射的核心用法;有以下几种方式获取指定类型的Type对象:
Type myType = typeof(MyType); //其中MyType是指定的类型 myType = myObj.GetType(); //其中myObj是指定类型的实例 myType = Type.GetType(myTypeName); //其中myTypeName是指定类型的全名,与Type的实例属性FullName保持一致 myType = myAssembly.GetType(myTypeName); //其中myAssembly是指定类型所在的程序集实例
※如果指定的类型不在全局命名空间中,myTypeName需要加入该类型所在的命名空间名称,例如:
MyNameSpace.MyClass
※如果指定的类型是嵌套类型,那么需要用+来分割其与声明它的类型,例如:
MyNameSpace.MyClass+MyNestedClass
※使用隐式转换、显式转换或as运算符将一个对象转换成其它类型的变量时,该变量获取到的类型信息不会变,依然是其原类型;
※只要获取的是同一种类型的类型信息,不管使用哪一种方式,它们的引用都是同一个:
int myNum1 = 10; int myNum2 = 20; //以下获取的所有类型实例都指向同一个对象,无论使用==还是Object.ReferenceEquals()都会返回true Type type1 = myNum1.GetType(); Type type2 = myNum2.GetType(); Type type3 = typeof(int); Type type4 = Type.GetType("System.Int32");
※对于泛型类型,只有其类型参数一致时,才会得到同样的类型实例;
通过类型的Type对象,可以获取该类型的各种成员信息;
※C#中的访问修饰符protected和internal在IL中没有任何意义,不会用于反射中;若要判断字段、方法、属性和事件中的get方法和set方法是否被声明为internal,使用字段信息类FieldInfo或方法信息基类MethodBase中的属性IsAssembly;若要判断是否被声明为protected,使用属性IsFamily;若要判断是否被声明为protectedinternal,使用属性IsFamilyOrAssembly;
※在各个获取成员信息的实例方法GetXXX()的参数列表中,有个BindingFlags类型的枚举组合用于指定搜索的范围组合,使用时必须要组合使用,例如:
BindingFlags.Public | BindingFlags.Instance //搜索范围为所有公共的实例成员
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance //搜索范围为所有实例成员
※Type类的实例方法IsSubclassOf(Type c)用于确定当前类是否是从指定的类派生来的;
※通过基类MemberInfo中的实例方法IsDefined(Type attributeType, bool inherit)可以确定当前成员是否被指定了指定类型的特性;
※通过基类MemberInfo中的属性MemberType可以获取当前类型或成员的类型枚举组合,枚举类型的声明为:
public enum MemberTypes { Constructor = 1, //构造函数 Event = 2, //事件 Field = 4, //字段 Method = 8, //方法 Property = 16, //属性 TypeInfo = 32, //类型 Custom = 64, //自定义成员类型 NestedType = 128, //嵌套类型 All = 191 }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!
作者:Minotauros
出处:https://www.cnblogs.com/minotauros/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容总结
以上是互联网集市为您收集整理的详解C#特性和反射(三)全部内容,希望文章能够帮你解决详解C#特性和反射(三)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。