现在的位置: 首页 > 综合 > 正文

C# 反射

2012年11月04日 ⁄ 综合 ⁄ 共 1171字 ⁄ 字号 评论关闭

class Program
{
static void Main(string[] args)
{
//Console.WriteLine(Untity.Rollover(Console.ReadLine()));
//Console.WriteLine(Untity.make('w', 5));
//foreach (string s in Untity.GetStringArray(Console.ReadLine()))
//{
// Console.WriteLine(s);
//}
Assembly ass = Assembly.LoadFile(@"E:\360data\重要数据\我的文档\visual studio 2010\Projects\dll\lrbrary\bin\Debug\lrbrary.dll");//加载程序集

Type type = ass.GetType("lrbrary.Untity");//命名空间.类 。实例化 命名空间和类的名字必须一起指定
FieldInfo[] fields = type.GetFields();//获取字段
PropertyInfo[] propertys = type.GetProperties();//获取属性
MethodInfo[] methods = type.GetMethods();//获取方法
foreach (MethodInfo method in methods)
{
Console.WriteLine("方法名称:" + method.Name);
Console.WriteLine("参数个数:" + method.GetParameters().Length);
foreach (ParameterInfo param in method.GetParameters())
{
Console.WriteLine(param.ParameterType + ":" + param.Name);
}
}
object obj = ass.CreateInstance("lrbrary.untity", true);
MethodInfo meth = methods[2];//调用方法
Console.WriteLine(meth.Invoke(obj, new object[] { }));//我们想用的方法是一个静态方法,这时候Invoke的时候,对于第一个参数是无视的,也就是我们写什么都不会被调用,即使我们随便new了一个any这样的Object,当然这种写法是不推荐的。但是我们如果Invoke的时候用了类型不一致的实例来做为参数的话,将会导致一个运行时的错误。
//Console.WriteLine(meth.Invoke(null, null));//调用无参数静态方法的例子,这时候两个参数我们都不需要指定,用null就可以了。
Console.ReadKey();
}
}

抱歉!评论已关闭.