• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#反射

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.什么是反射(Reflection)
System.Reflection 命名空间中的类与 System.Type 使你能够获取有关加载的程序集和其中定义的类型的信息,如类、接口和值类型。

2.反射能干什么
可以使用反射在【运行时】创建、调用和访问类型实例。说白了就是通过反射能够获取一个未知类的类型。

3.通过代码解读反射

  • System.Type获取有关加载的程序集和其中定义的类型的信息
public class ReflectionTest {
        
        /// <summary>
        /// 反射名称
        /// </summary>
        public string ReflectionName { get; set; }

        public string GetName()
        {
            return "张三";
        }
}
Type type = typeof(ReflectionTest);
string name = type.Name;//获取当前成员的名称
string fullName = type.FullName;//获取类的全部名称不包括程序集
string nameSpace = type.Namespace;//获取该类的命名空间
var assembly = type.Assembly;//获取该类的程序集名
var module = type.Module;//获取该类型的模块名            
var memberInfos = type.GetMembers();//得到所有公共成员
  • 反射构造带参的例子(带参)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace FanShe3
{
    class Test
    {
        public Test(string Say)
        {
            Console.WriteLine(Say);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Test t;
            string Say = "哈哈!!创建成功";
            //开始创建反射,这个是获取当前程序集的意思,如果需要反射类库可以使用Assembly.Load的方法
            Assembly asm = Assembly.GetExecutingAssembly();
            //需要注意的地方是,如果反射的构造函数带参只是一个,这里创建的也必须是一个参数的Object数组,而且顺序也必须和构造函数一样
            object[] Obj = new object[1];
            Obj[0] = Say;
            t = (Test)asm.CreateInstance("FanShe3.Test", true, BindingFlags.Default, null, Obj, null, null);

            Console.ReadKey();
        }
    }
}
  • 传递对象
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace FanShe4
{
    class Test
    {
        public Test(Test2 t2)
        {
            t2.Say();
        }
    }

    public class Test2
    {
        public void Say()
        {
            Console.WriteLine("哈哈!!创建成功");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test t;
            Test2 t2 = new Test2();
            //开始创建反射,这个是获取当前程序集的意思,如果需要反射类库可以使用Assembly.Load的方法
            Assembly asm = Assembly.GetExecutingAssembly();
            //需要注意的地方是,如果反射的构造函数带参只是一个,这里创建的也必须是一个参数的Object数组,而且顺序也必须和构造函数一样
            object[] Obj = new object[1];    
            Obj[0] = t2;
            t = (Test)asm.CreateInstance("FanShe4.Test", true, BindingFlags.Default, null, Obj, null, null);

            Console.ReadKey();
        }
    }


}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#委托多播、Lambda表达、多线程、任务发布时间:2022-07-10
下一篇:
字符串截取(C#)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap