首页 > 代码库 > 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#学习笔记 ----反射