反射学习整理_第1页
反射学习整理_第2页
反射学习整理_第3页
反射学习整理_第4页
反射学习整理_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、反射学习整理   一、MSDN上面找的学习资料反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。反射通常具有以下用途:·   使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。·   使用 Module 了解如下的类似信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上定义的所有全局方法或其

2、他特定的非全局方法。·   使用 ConstructorInfo 了解以下信息:构造函数的名称、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetConstructors 或 GetConstructor 方法来调用特定的构造函数。·   使用 MethodInfo 了解以下信息:方法的名称、返回类型、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 Ge

3、tMethods 或 GetMethod 方法来调用特定的方法。·   使用 FieldInfo 了解以下信息:字段的名称、访问修饰符(如 public 或 private)和实现详细信息(如 static)等;并获取或设置字段值。·   使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。·   使用 PropertyInfo 来了解如下的类似信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取

4、或设置属性值。·   使用 ParameterInfo 来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。·   当您在一个应用程序域的仅反射上下文中工作时,请使用 CustomAttributeData 来了解有关自定义属性的信息。使用 CustomAttributeData,您不必创建属性的实例就可以检查它们。二、反射的重要应用与相关练习反射在下列情况下很有用:·   需要访问程序元数据的属性。C# 具有一个反射系统,可用来检索用自定义属性定义的信息

5、。主要方法是 GetCustomAttributes,它返回对象数组,这些对象在运行时等效于源代码属性。下面是我参照MSDN写的一个例子:定义一个自定义属性,将其应用于若干实体并通过反射进行检索。 1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace Attribut 6 7    /允许指定多个属性实例,类YaoJian中进行了练习&

6、#160;8    AttributeUsage(AttributeTargets.Class,AllowMultiple = true) 9    public class Students:Attribute10    11        string name;12     

7、0;  public int age;13        14        public Students(string Name)15        16            

8、;name = Name;17            age = 18;18        1920        public string GetName()21        

9、;22            return name;23        24    25    /将自定义属性应用于类26    Students("李江")27    class LiJiang2

10、8    29        /30    3132    /不定义Students属性33    class ZhaoYong34    35        /36    37 

11、   /应用多个属性实例38    Students("姚键"),Students("李云",age = 20)39    class YaoJian40    41        /42    43    class&

12、#160;Program44    45        static void Main(string args)46        47            StudentsInfo(typeof(LiJiang);48  &

13、#160;         StudentsInfo(typeof(ZhaoYong);49            StudentsInfo(typeof(YaoJian);50        5152        privat

14、e static void StudentsInfo(Type t)53        54            Console.WriteLine("学生信息是:0",t);55            /获取对象中的

15、自定义属性56            Attribute att = Attribute.GetCustomAttributes(t);57            foreach (Attribute a in att)58     

16、60;      59                if (a is Students)60                61     

17、               Students S = (Students)a;62                    Console.WriteLine("学生的姓名是:0,年龄是:1",S.G

18、etName(),S.age.ToString();63                64            65        66    6768运行结果是:  ·

19、60;  检查和实例化程序集中的类型。·   在运行时构建新类型。使用 中的类。·   执行后期绑定,访问在运行时创建的类型的方法。三、实践,用反射调用COM用反射调用COM非常的方便,不需要先对COM进行注册添加引用,用Assembly类中的LoadFrom方法直接可以讲.dll文件加载到程序中,然后对其实例化使用。实例:1、先做一个简单的调用系统outlook的COM。先在VS2005中建一个windows控件库工程,取名为Send,然后把控件的界面删掉,在Send工程中添加一个windows窗体也取名为Send,在窗体

20、的load事件里面写代码调用outlook。完整的代码如下: 1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8 9/使用进程引用命名空间10u

21、sing System.Diagnostics;11namespace Send1213    public partial class Send : Form14    15        public Send()16        17   &

22、#160;        InitializeComponent();18        19        /*/ <summary>20        / 在Form_Load中调用Windows带的outlook21  &

23、#160;     / </summary>22        / <param name="sender"></param>23        / <param name="e"></param>24   &

24、#160;    private void Send_Load(object sender, EventArgs e)25        26            Process P = new Process();27    

25、         = "C:Program FilesOutlook Expressmsimn.exe"28            P.Start();29            this.Close();30 

26、;       31    3233代码写完以后,生成一下,这时在工程的bin文件夹下面就生成了一个Send.dll的文件。2、用反射来调用上面的COM在Send工程的解决方案上面点击右键添加/新建项目/windows应用程序,取名Fanshe在Form1上面添加一个button,并设置其相关属性,界面如图:把上面生成的Send.dll放到Fanshe的bin目录下面,在button的click事件中添加代码调用COM,完整代码如下: 1using System;&

27、#160;2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8 9/使用反射引用的命名空间10using System.Reflection;1112namespace Fanshe13

28、14    public partial class frm : Form15    16        public frm()17        18            I

29、nitializeComponent();19        2021        private void btn_Click(object sender, EventArgs e)22        23        &#

30、160;   /*/*加载COM,这样写COM的默认路径在bin文件夹下,如果不在可以通过绝对路径或者相对路径指到COM所在的位置24             *比如:Assembly.LoadFrom("D:/App/Send.dll")或Assembly.LoadFrom("./Send.dll")25             */26   

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论