首页 > 代码库 > C#学习笔记 ----反射
C#学习笔记 ----反射
自定义特性允许把自定义元数据与程序元素关联起来
.NET Framework允许用户定义自己的特性
编译器不能识别,但是特性应用于程序元素时,可以在编译好的程序集中用作元数据
示例:
public string SocialSecurityNumber{ get{ //etc.
特性类本身用一个特性 ----System.AttributeUsage特性来标记
AttributeUsage主要用于标识自定义特性可以应用到哪些类型的程序元素上
这些信息由它的第一个参数给出,该参数必选,类型是枚举类型AttributeTargets
其成员如下:
AllAssemblyClassConstructorDelegateEnumEventFieldGenericParameterInterfaceMethodModuleParameterPropertyReturnValueStruct
特性应用到整个程序集或模块中,Assembly和Module
示例:
[assembly:SomeAssemblyAttribute(Parameters)][module:SomeAssemblyAttribute(Parameters)]
反射
Type实际上是一个抽象基类
获取指向任何给定类型的Type引用有3种常用方式:
a.使用C#的typeof运算符
Typet = typeof(double);
b.使用GetType()方法,所有类都从System.Object继承这个方法
double d = 10;Type t = d.GetType();
c.调用Type类的静态方法GetType()
Type t = Type.GetType("System.Double");
Type是许多反射功能的入口
Type属性:
Name 数据类型名
FullName 数据类型的完全限定名(包括名称空间)
Namespace 在其中定义数据类型的名称空间名
BaseType 该Type的直接基本类型
UnderlyingSystemType 该Type在.NET运行库中映射到的类型
Type成员方法:
//返回对象类型 //方法ConstructorInfo GetConstructor()、GetConstructors()EventInfo GetEvent()、GetEvents()FieldInfo GetField()、GetFields()InterfaceInfo GetInterface()、GetInterfaces()MemberInfo GetMember()、GetMembers()MethodInfo GetMethod()、GetMethods()PropertyInfo GetProperty()、GetProperties()
Assembly类在System.Reflection名称空间中定义,它允许访问给定程序集的元数据,它也包含可以加载和执行程序集的方法。
加载程序集,示例:
Assembly assembly1 = Assembly.Load("SomeAssembly");Assembly assembly2 = Assembly.LoadFrom(@"C:\My Projects\Software\SomeOtherAssembly");
获得在相应程序集中定义的所有类型的详细信息,调用Assembly.GetType()方法
查找自定义特性,GetCustomAttribute()
C#学习笔记 ----反射