.net 反射 作用

本文详细介绍了如何利用反射在C#中动态获取类型信息,实例化对象并复制对象,以及在工厂模式中的常见应用。通过实例展示了如何在不引用源dll的情况下,将特定dll作为组件在宿主程序中调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.程序运行时,动态获取某个特定DLL中的类型信息,动态生成类型,实例化类型对象,调用对象方法,获得对象属性。可以不用添加程序集dll的引用到工程项目中。

这就使得一些事先设计好的dll可以以装配件的形式,被宿主程序调用。 


2.

比如有一个猫类:
    public class Cat
    {
        public int Age { get; set; }
        public string Name { get; set; }
        //假设它的属性还有很多很多
    }
现在问题是:我NEW一个猫叫"小猫1",我想复制这一个对象,“小猫2”,那该怎么处理呢?
像下面这样吗:
Cat c1 = new Cat() { Age=20,Name="小猫1" };
Cat c2=c1;
那这样肯定是错的。因为c1和c2都引用的是同一个对象“小猫1”,那我现在想复制一个跟小猫1一模一样的对象怎么处理呢?这里就用到了反射:
方法:
        protected void Page_Load(object sender, EventArgs e)
        {

            Cat c1 = new Cat() { Age=20,Name="小猫" };
            Type type = typeof(Cat);
            Cat c2 = new Cat();
            foreach (System.Reflection.PropertyInfo info in type.GetProperties())
            {

                info.SetValue(c2, info.GetValue(c1, null), null);
            }
            Label1.Text = c2.Name;
            Label2.Text = c2.Age.ToString();
        }

3.工厂模式中常用到反射

另,应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值