c#利用反射Assembly 对类和成员属性进行操作

protected static void test()  
{  
    //获取程序集  
    Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();//Assembly.LoadFrom("test.dll");   
  
    //获取模块  
    Module[] modules = assembly.GetModules();  
    foreach (Module module in modules)  
    {  
        Console.WriteLine("module name:" + module.Name);  
    }   
  
    //获取类  
    Type type = assembly.GetType("Reflect_test.PurchaseOrderHeadManageModel", true, true); //命名空间名称 + 类名  
  
    //创建类的实例  
    object obj = Activator.CreateInstance(type, true);  
  
    //获取私有字段  
    FieldInfo[] myfields = type.GetFields(BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);  
    for (int i = 0; i < myfields.Length; i++)  
    {  
        Console.WriteLine("字段名:{0},类型:{1}", myfields[i].Name, myfields[i].FieldType);  
    }  
  
    //获取公共属性  
    PropertyInfo[] Propertys = type.GetProperties();  
    for (int i = 0; i < Propertys.Length; i++)  
    {  
       // Propertys[i].SetValue(Propertys[i], i, null); //设置值  
       // Propertys[i].GetValue(Propertys[i],null); //获取值  
        Console.WriteLine("属性名:{0},类型:{1}",Propertys[i].Name,Propertys[i].PropertyType);  
    }  
  
    //构造函数集合  
    ConstructorInfo[] myconstructors = type.GetConstructors();  
    foreach (ConstructorInfo csinfo in myconstructors)  
    {  
        Console.WriteLine("ConstructorInfo:{0}",csinfo.Name);  
        foreach (ParameterInfo pinfo in csinfo.GetParameters())//构造函数参数列表  
        {  
            Console.WriteLine("Parameter:{0},{1}", pinfo.Name,pinfo.ParameterType);  
        }  
    }  
    //公共方法,包括属性  
    MethodInfo[] methods = type.GetMethods();  
    foreach (MethodInfo method in methods)  
    {  
        //IsSpecialName:是否是属性  
        if (!method.IsSpecialName)   
        {  
           // Console.WriteLine("类型:" + method.Attributes);  
            Console.WriteLine("method name:" + method.Name);  
        }  
    }  
      
    //调用静态方法  
    int result = (int)type.InvokeMember("StaticPlus", BindingFlags.InvokeMethod, null, null, new object[] {2,3 });  
    Console.WriteLine("调用静态方法-结果是:{0}",result);  
  
    //调用非静态方法  
    result = (int)type.InvokeMember("Plus", BindingFlags.InvokeMethod, null, obj, new object[] { 3, 4 });  
    Console.WriteLine("调用非静态方法-结果是:{0}",result);  
  
     EventInfo[] Myevents=type.GetEvents();  
     foreach (EventInfo einfo in Myevents)  
     {  
         Console.WriteLine("事件:{0}", einfo.Name);  
     }  
}  

 

转载于:https://www.cnblogs.com/colder/p/3360608.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值