用反射获取构造函数带参数的实例对象

经过测试,如果显示声明有参构造函数,用反射实例化的时候,就需要传入构造函数的参数,如果同时声明了有参和无参构造函数 或只声明了无参构造函数则不需要传入参数,直接可以获取实例

//显示无参构造函数,如果只显示定义了有参构造函数,就不能使用如下代码反射创建实例对象
            //var art = Assembly.LoadFrom(@"F:\Q\NET\qi\jlcms_sql_src\jlcms.Web\bin\jlcms.DAL.dll").CreateInstance("jlcms.DAL.cards");
           
            //用反射创建有参构造函数的实例
            var art = Assembly.LoadFrom(@"F:\Q\NET\qi\jlcms_sql_src\jlcms.Web\bin\jlcms.DAL.dll").CreateInstance("jlcms.DAL.article",false, BindingFlags.Default, null, new object[]{"dt"}  , null, null);
            Console.WriteLine(art.ToString());
            Console.ReadLine();

article 类代码如下

using System;
using System.Data;
using System.Text;
using System.Collections.Generic;
using System.Data.SqlClient;
using jlcms.DBUtility;
using jlcms.Common;

namespace jlcms.DAL
{
    /// <summary>
    /// 数据访问类:article
    /// </summary>
    public partial class article
    {
        private string databaseprefix; //数据库表名前缀
        public article(string _databaseprefix)
        {
            databaseprefix = _databaseprefix;
        }
}
}

cards类代码如下

时间: 2024-10-13 13:40:05

用反射获取构造函数带参数的实例对象的相关文章

C#通过反射获取类中的方法和参数个数,反射调用方法带参数

using System; using System.Reflection; namespace ConsoleApp2 { class Program { static void Main(string[] args) { //反射获取 命名空间+类名 string className = "ConsoleApp2.ClassSample"; string methodName = "test1"; //传递参数 Object[] paras = new Obje

2014.2.24 带参数多线程实例

定义全局变量 ParameterizedThreadStart ParaStart; //表示带参数的多线程 Thread[] tds = new Thread[10]; //运行时再实例化 static object objLock = new object(); //多线程锁 //运行中 ParaStart = new ParameterizedThreadStart(ReadPic); for (int i = 0; i < 10; i++) //创建10个线程处理照片 { tds[i]

Bootstrap 模态框(Modal)带参数传值实例

模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 为了实现父窗体与其的交互,通常需要向其传值,实现带参数的传递,查看数据的唯一性. 例如:订单列表页,点击一个操作按钮,要对相应的订单进行操作,就需要传递该订单相对应的id. 具体写法: <div class="btn btn-primary btn-sm " data-toggle="modal" data-t

Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别(转)

一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:  其中 i.加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构.即加载后最终得到的是Class对象,并且更加值得注意的是:该Java.lang.Class对象是单实例的,无论这个类创建了多少个对象,他的Class对象时唯一的!!!!.

获取地址栏的参数(依对象的形式返回)

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible"

C# 利用反射根据类名创建类的实例对象

“反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)");

通过反射获取列表属性里保存的对象类型

假设有个对象里有一个list<Object> listProperty 属性,要获取Object的类型: Class<?> typeClass = field.getType(); if (List.class.isAssignableFrom(typeClass)) { Type fieldType = field.getGenericType(); if (fieldType instanceof ParameterizedType) { ParameterizedType p

java 27 - 3 反射之 通过反射获取构造方法并使用

类 Constructor<T>:提供关于类的单个构造方法的信息以及对它的访问权限. 通过反射的方法获取构造方法并使用  ps:先忽略泛型 A.1:获取构造方法的数组: public Constructor<?>[] getConstructors():获得所有公共构造方法 public Constructor<?>[] getDeclaredConstructors():获得所有构造方法 A.2:获取单个构造方法(用于非私有的构造方法) public Construc

springboot启动流程(一)构造SpringApplication实例对象

所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 启动入口 本文是springboot启动流程的第一篇,涉及的内容是SpringApplication这个对象的实例化过程.为什么从SpringApplication这个对象说起呢?我们先看一段很熟悉的代码片段 @SpringBootApplication public class SpringBootLearnApplication { public static void main(Str