.Net——动态创建对象

简介: 刚开始看到这个标题的时候其实我也是很难接受的,duang~因为实在想不出什么时候我要去这样子创建对象,干嘛不new一个呢?但根据学习设计模式的经验来说,有时候,不去new对象才是最灵活的做法。

刚开始看到这个标题的时候其实我也是很难接受的,duang~因为实在想不出什么时候我要去这样子创建对象,干嘛不new一个呢?但根据学习设计模式的经验来说,有时候,不去new对象才是最灵活的做法。


首先,写个小类拿着玩儿:

     public class Calculator
    {
       private int x;
       private int y;

       public Calculator() {
           x = 0;
           y = 0;
           Console.WriteLine("Calculator () invoked");
       }

       public Calculator(int x, int y) {


           this.x = x;
           this.y = y;
           Console.WriteLine("calculator(int x, int y) invoked");
       }

    }

接下来,我们就在同一个assembly里面,针对这个类的有参数的构造方法和无参数的构造方法进行动态创建对象。

其实感觉动态创建对象跟type还是有莫大关系的。

#region 使用无参数的构造函数创建对象(Assembly的CreateInstance)

                //Assembly asm = Assembly.GetExecutingAssembly();
               // Calculator cal = asm.CreateInstance("动态创建对象.Calculator", true) as Calculator;

 #endregion
#region 使用无参数的构造函数创建对象([using System.Runtime.Remoting;]使用Activator)

                //ObjectHandle handler = Activator.CreateInstance(null, "动态创建对象.Calculator");
                //Calculator cal = handler.Unwrap() as Calculator;

 #endregion

在使用有参数的构造函数进行创建的时候,其实就是指定的参数多一点:

#region 使用有参数的构造函数创建对象

                Assembly asm = Assembly.GetExecutingAssembly();
                object[] parameters = new object[2];
                parameters[0] = 3;
                parameters[1] = 3;

                Calculator cal = asm.CreateInstance("动态创建对象.Calculator", true, BindingFlags.Default, null, parameters, null, null) as Calculator;

 #endregion


这里写图片描述


比较重要的参数:
object[],包含传递进去的构造函数参数,注意数组顺序要跟构造函数中顺序一致;



利用强大的反射,创建起来还是蛮容易的。。。

目录
相关文章
|
容器
.NET Core-作用域与对象释放行为详解
.NET Core-作用域与对象释放行为详解
|
7月前
|
开发框架 .NET API
ASP.NET Core Web中使用AutoMapper进行对象映射
ASP.NET Core Web中使用AutoMapper进行对象映射
|
8月前
|
C#
.NET开发中合理使用对象映射库,简化和提高工作效率
.NET开发中合理使用对象映射库,简化和提高工作效率
199 0
|
JSON 数据格式
.NET Core - 配置绑定:使用强类型对象承载配置数据
.NET Core - 配置绑定:使用强类型对象承载配置数据
|
容器
.NET Core作用域与对象释放行为详解
上节,我们提到,容器中有3种不同生命周期,分别是Singleton、Scoped和Transient。那么,你知道这3种类型的对象的释放时机和坑吗?
|
SQL 存储 缓存
SQl Server——ADO.NET五大对象
在某些编程中总是会需要用到数据库,那如何让应用程序和数据库之间建立联系呢?ADO.NET就提供了应用程序连接数据库的桥梁
|
XML API 数据格式
十九、.net core使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问webservice接口
使用SoapCore实现在.net core平台下开发webservice;以及使用HttpClientFactory动态访问webservice。首先,需要在包项目下面引用SoapCore:
1105 0
十九、.net core使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问webservice接口
|
机器学习/深度学习 人工智能 计算机视觉
YOLOv7 在 ML.NET 中使用 ONNX 检测对象
本文介绍如何在 ML.NET 中使用 YOLOv7 的 ONNX 模型来检测图像中的对象。
467 0
YOLOv7 在 ML.NET 中使用 ONNX 检测对象
|
开发框架 .NET
.net 动态修改web.config 中appSettings节点中的值
.net 动态修改web.config 中appSettings节点中的值
165 0
.net实现动态验证码
绪论:本文是.net实现动态验证码的显示,需使用到一般处理程序(ashx)
282 0