C#反射 入门学习 01
2014-04-14 20:11
253 查看
前言
获取方法的相关信息的两种形式
反射是一种允许用户获得类信息的C#功能,Type对象映射它代表的底层对象;
在.Net 中, 一旦获得了Type对象,就可以使用GetMethods()方法获取此类型支持的方法列表;该方法的两种形式:
MethodInfo [] GetMethods()
MethodInfo [] GetMethods(BindingFlags bindingflas) :它的参数带有一些限制 BindingFlags 是一个枚举
枚举成员 [DeclaredOnly,Instance ,Public] 枚举成员的功能使用 在编译器中使用"."符号后自己认真观察 【相信你很快能够理解】
ParameterInfo[] GetParameters() 方法返回一个方法的参数列表
下面用到的类 MyClass ,为了方便阅读,我把它折叠了!
Main
详细地址 :http://www.mhprofessional.com/product.php?cat=112&isbn=007174116X&cat=112
获取方法的相关信息的两种形式
反射是一种允许用户获得类信息的C#功能,Type对象映射它代表的底层对象;
在.Net 中, 一旦获得了Type对象,就可以使用GetMethods()方法获取此类型支持的方法列表;该方法的两种形式:
MethodInfo [] GetMethods()
MethodInfo [] GetMethods(BindingFlags bindingflas) :它的参数带有一些限制 BindingFlags 是一个枚举
枚举成员 [DeclaredOnly,Instance ,Public] 枚举成员的功能使用 在编译器中使用"."符号后自己认真观察 【相信你很快能够理解】
ParameterInfo[] GetParameters() 方法返回一个方法的参数列表
下面用到的类 MyClass ,为了方便阅读,我把它折叠了!
Type t = typeof(MyClass); MyClass reflectOb = new MyClass(10, 20); int val; Console.WriteLine("Invoke methods in " + t.Name);//调用MyClass类的方法 Console.WriteLine(); MethodInfo[] mi = t.GetMethods(); foreach (MethodInfo m in mi)//调用每个方法 { //获得方法参数 ParameterInfo[] pi = m.GetParameters(); if (m.Name.Equals("Set",StringComparison.Ordinal)&&pi[0].ParameterType==typeof(int)) { // 指定 System.String.Compare(System.String,System.String) 和 System.String.Equals(System.Object) // 方法的某些重载要使用的区域、大小写和排序规则。 //StringComparison.Ordinal 使用序号排序规则比较字符串 object[] obj = new object[2]; obj[0] = 9; obj[1] = 18; m.Invoke(reflectOb, obj); } else if (m.Name.Equals("Set",StringComparison.Ordinal)&&pi[0].ParameterType==typeof(double)) { object[] obj = new object[2]; obj[0] = 1.12; obj[1] = 23.4; m.Invoke(reflectOb, obj); } else if (m.Name.Equals("Sum",StringComparison.Ordinal)) { val = (int)m.Invoke(reflectOb, null); Console.WriteLine("Sum is : " + val); } else if (m.Name.Equals("IsBetween", StringComparison.Ordinal)) { object[] obj = new object[1]; obj[0] = 14; if ((bool)m.Invoke(reflectOb, obj)) { Console.WriteLine("14 is between x and y"); } } else if (m.Name.Equals("Show",StringComparison.Ordinal)) { m.Invoke(reflectOb,null); } }
Main
详细地址 :http://www.mhprofessional.com/product.php?cat=112&isbn=007174116X&cat=112
相关文章推荐
- C#键盘屏蔽(转)
- C#中的参数关键字params
- C#将dll打包到程序中技巧之二
- C#将dll打包到程序中技巧之一
- 使用WPF的自定义InkCanvas实现毛笔效果
- C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
- c# 将winform窗体应用程序编译成dll
- c#中的可选参数和命名参数的使用
- C#实现禁止选中Excel单元格,达到不能修改、复制、 全选
- C#图解教程读书笔记(第9章 语句)
- C# 特性详解
- C# 反射机制
- C#自定义特性
- [转载]c# OpenFileDialog
- C#调动外部程序事例——Process类的简单使用
- 一个使用C#的TPL Dataflow Library的例子:分析文本文件中词频
- C#事件支持发布者/订阅者模式(观察者模式)
- 使用控制項Timer與ProgressBar的鼠标点击游戏,带排名
- c#中的dynamic类型
- C#管理控制IIS7的方法