您的位置:首页 > 编程语言 > C#

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 ,为了方便阅读,我把它折叠了!

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: