C#反射学习

5 篇文章 0 订阅
1 篇文章 0 订阅

反射的作用:在程序运行时,加载dll,从而得到其中的一些信息,如type,property,等。同时还可以对其赋值,或调用其中的某些方法。

命名空间及类型

C#中,关于反射要用的的所有程序集都在命名空间System.Reflection中,下面简单列举和介绍一些其中常用的程序集:
  1. Assembly 用于加载程序集,并且可以获得该程序集的大部分信息,如版本信息,区域信息等
    其初始化方法有:
    Assembly assembly=Assembly.Load();
    Assembly assembly=Assembly.LoadFrom();
    Assembly assembly=Assembly.LoadFile();
    其中:
    LoadFile 方法用来来加载和检查具有相同标识但位于不同路径中的程序集。但不会加载程序的依赖项。

    1. Type 用于获取实例
      获取实例的三种方法:
      1.使用object.GetType(); 如:
      Student st = new Student();
      var type = st.GetType();

    2.System.Type.GetType()静态方法,该方法有重载版,后面有两个bool的参数,用于指定当前类型不能找到是是否抛出异常,和是否区分大小写()
    Type t = Type.GetType("Student",false,true);
    3.使用typeof

    Type t = typeof(Student);

    3.常用类
    (1) EventInfo 事件的信息

    (2) FieldInfo 字段的信息

    (3) MethodInfo 方法的信息

    (4) ParameterInfo 参数的信息

    (5) PropertyInfo 属性的信息

    (6) MemberInfo 是抽象基类,为 EventInfo、FieldInfo 、MethodInfo、PropertyInfo等类型定义了公共的行为。

这里就不一一详细介绍了,下面贴出自己的代码

using System;
using System.Collection.Generic;
using System.Reflection;

namespace ReflectionTest
{
    class Program
    {
    static void Main(string[] args)
    {
        Assembly ass;
        Type type;
        Object obj;
        Object any = new Object();
        ass = Assembly.LoadFile("E:\\ClassLibrary1.dll");
        type = ass.GetType("ReflectionTest.WriteTest");
        MethodInfo method = type.GetMethod("WriteString");
        string test = "test";
        int i = 1;
        Object[] parametors = new Object[] {test, i};
        obj = ass.CreateInstance("ReflectionTest.WriteTest");
        method.Invoke(obj, parametors);//函数调用
        PropertyInfo property = obj.GetType().GetProperty("ints");
        int k = 6;
        var tempStr = k.ToString();
        property.SetValue(obj, string.IsNullOrEmpty(tempStr) ? null : Convent.ChangeType(tempStr, property.PropertyType), null);//类型转换
    }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值