与java非常相似,而且还能分析dll文件中的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using myDll;
namespace ConsoleApplication3WcfCilent
{
class Program
{
static void Main(string[] args)
{
/**
Console.WriteLine("hello");
Service1Client s = new Service1Client();
WcfService1.CompositeType cp = new WcfService1.CompositeType();
cp.BoolValue = true;
s.GetDataUsingDataContract(cp);
var x=s.GetData(2);
Console.WriteLine(x);
Console.WriteLine(cp.StringValue);
*/
/反射 获取某个dll的所有类型
int i,j;
//加载dll
Assembly assembly=Assembly.LoadFrom("myDll.dll");
//所有类型
Type[] types=assembly.GetTypes();
Console.WriteLine(assembly.GetName().Name+"包括类型:");
//循环输出类型名称
for(i=0;i<types.GetLength(0);++i)
{
Console.WriteLine("\r("+i+") " + types[i].Name);
}
i=types.Length - 1;
Console.WriteLine("选择类型对应数字(0-"+i+");");
//控制台输入
//j=Convert.ToInt32(Console.ReadLine());
j = 3;
Console.WriteLine();
//判断选择的类型是否是sport类的子类
if(types[j].IsSubclassOf(typeof(Sport)))
{
//类型的结果信息
ConstructorInfo ci=types[j].GetConstructor(new Type[0]);
//使用指定参数调用当前构造函数,生成对象
Sport sport=(Sport)ci.Invoke(new Object[0]);
//调用对象方法
Console.WriteLine(sport.GetName() + " has " + sport.GetDuration());
}
else
{
Console.WriteLine(types[j].Name + "不是Sport的子类");
}
///
//获取某个类型的所有属性
Type t1 = typeof(Soccer);
//特性
PropertyInfo[] pps = t1.GetProperties();
//成员
MemberInfo[] mms = t1.GetMembers();
//方法
MethodInfo[] mts = t1.GetMethods();
//属性
FieldInfo[] ffs = t1.GetFields();
Console.WriteLine("PropertyInfo:"+pps.Length);
for (i = 0; i < pps.Length; i++)
{
Console.WriteLine("\r(" + i + ") " + pps[i].Name);
}
Console.WriteLine("MemberInfo:" + mms.Length);
for (i = 0; i < mms.Length; i++)
{
Console.WriteLine("\r(" + i + ") " + mms[i].Name);
}
Console.WriteLine("FieldInfo:" + mts.Length);
for (i = 0; i < ffs.Length; i++)
{
Console.WriteLine("\r(" + i + ") " + ffs[i].Name);
}
Console.WriteLine("MethodInfo:"+mts.Length);
for (i = 0; i < mts.Length; i++)
{
Console.WriteLine("\r(" + i + ") " + mts[i].Name);
}
//属性设置
Sport s1 = new Soccer();
Console.WriteLine("原值:"+s1.name);//默认soccer
try {
FieldInfo ff=t1.GetField("name");
ff.SetValue(s1,"testdd");
Console.WriteLine("赋值后:" + s1.name);
}
catch (Exception e) {
Console.WriteLine(e.Message);
}
//操作方法
MethodInfo mm = t1.GetMethod("GetName");
Console.WriteLine("调用GetName方法返回:"+mm.Invoke(s1, null));
}
}
}