• 随便写点代码,发现了这个问题。。。 因为一开始使用的Assembly.Load.CreateInstance是无法加参数的。。。 using System; using System.Collections.Generic; using System.Linq;...using System.Configura

    随便写点代码,发现了这个问题。。。

    因为一开始使用的Assembly.Load.CreateInstance是无法加参数的。。。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using System.Configuration;
    
    namespace DecorationClass
    {
        class Player
        {
            public Player(string Name)
            {
                this._Name = Name;
                Console.WriteLine("1");
    
            }
            private readonly string _Name;
    
            public string Name
            {
                get { return _Name; }
            } 
    
        }
        class Program
        {
            static void Main(string[] args)
            {
                Player player1;
                string ClassName = ConfigurationManager.AppSettings["Player1"];
                string Name = ConfigurationManager.AppSettings["Player1Name"];
                //***************************************************************
                Assembly asm = Assembly.GetExecutingAssembly();
                object[] ObjArray = new object[1];
                ObjArray[0] = Name;
                player1 = (Player)asm.CreateInstance("DecorationClass." + ClassName, true, BindingFlags.Default, null, ObjArray, null, null);
            }
        }
    }

    从注释的下面那行开始就是

    现在才发现object是所有类的基类是多么的重要。。。

    这里面的传参是通过一个一个object数组进行传递的,也就是ObjArray,所有的类型都可以,但是顺序一定要按照构造函数的顺序来存!

    展开全文
  • 知道类名,通过反射获取类对象(有和无参构造函数) object obj = Activator.CreateInstance(Type.GetType("类名"));//无参构造函数 object[] para = { s };//参数 object obj = (IDataBase)Activator....

    知道类名,通过反射获取类对象(有参和无参构造函数)


    object obj = Activator.CreateInstance(Type.GetType("类名"));//无参构造函数
    
    object[] para = { s };//参数
    object obj = (IDataBase)Activator.CreateInstance(Type.GetType("类名"), s);//有参构造函数


    展开全文
  • public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { ...

    public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
            // TODO Auto-generated method stub
            Class<?> class1 = String.class;//反射String
            //利用反射创建无参对象
            //Constructor<?> constructor = class1.getConstructor();
            Constructor<?> constructor = class1.getConstructor();
            Object newInstance = constructor.newInstance();
            
            //利用反射创建String(bytes)对象
            byte[] bytes = {97,98,101,110,120};
            Constructor<?> constructor2 = class1.getConstructor(byte[].class,int.class,int.class);//(byte[].class
            Object str2 = constructor2.newInstance(bytes,0,5);//new String(bytes)
            System.out.println(str2);//abenx

        }

    展开全文
  • C# 动态反射创建对象

    2018-07-27 17:21:16
    C#利用反射动态创建对象 参数的构造函数和String类型…………………….1 1、反射动态创建对象 2、反射动态创建参数的构造函数 3、反射动态创建String类型 例:反射动态创建对象 object objTest = assembly....

    C#利用反射动态创建对象 带参数的构造函数和String类型…………………….1
    1、反射动态创建对象
    2、反射动态创建带参数的构造函数
    3、反射动态创建String类型

    例:反射动态创建对象
    object objTest = assembly.CreateInstance(“newExWebService.Entity.” + “Test”); //类的完全限定名?(即包括命名空间
    string strTest = “{\”Test\”:[” + Newtonsoft.Json.JsonConvert.SerializeObject(objTest) + “]}”;
    例:反射动态创建带参数的构造函数
    Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
    object[] parameters = new object[1];
    parameters[0] = “test string”;
    object obj = assembly.CreateInstance(“newExWebService.Entity.” + ClassName, true, System.Reflection.BindingFlags.Default, null, parameters, null, null); //类的完全限定名(即包括命名空间)
    string strobj = “{\”” + ClassName + “\”:[” + Newtonsoft.Json.JsonConvert.SerializeObject(obj) + “]}”;

    展开全文
  • 上面博客学习了使用反射查看类型的信息,以及使用反射获取特性对象。 下面使用反射来动态创建对象。首先准备一个Test类: public class TestClass { public TestClass() { Console.WriteLine("这是一个无参构造...

    上面博客学习了使用反射查看类型的信息,以及使用反射获取特性对象。

    下面使用反射来动态创建对象。首先准备一个Test类:

        public class TestClass
        {
            public TestClass()
            {
                Console.WriteLine("这是一个无参构造函数");
            }
            public TestClass(int a, int b)
            {
                Console.WriteLine("这是一个有参数构造函数 > a+b=" + (a + b));
            }
    
            public int show()
            {
                return 1;
            }
    
            public static int show(int a,int b)
            {
                return a + b;
            }
        }
    1.使用无参构造函数创建对象:
           //使用无参构造函数创建对象
                Assembly asm = Assembly.GetExecutingAssembly();//获取当前代码所在程序集
                Object obj = asm.CreateInstance("AssemblyDemo.TestClass", true);//创建一个对象TestClass对象
                //打印:这是一个无参构造函数
    
                ObjectHandle handler = Activator.CreateInstance(null, "AssemblyDemo.TestClass");
                //CreateInstance 第一个参数为程序集名称,为null 表示当前程序集,第二个参数表示要创建的类型
                Object obj1 = handler.Unwrap();
                //打印:这是一个无参构造函数
    2.使用有参数构造函数创建对象:
           //使用有参构造函数创建对象            
                Object [] param= new  Object[2];
                param[0]=1;
                param[1]=2;
                Assembly asm2 = Assembly.GetExecutingAssembly();
                Object obj2 = asm2.CreateInstance("AssemblyDemo.TestClass", true, BindingFlags.Default, null, param ,null,null);
                //BindingFlag是限定对类型成员的搜索,这里Default不使用BindingFlags策略
    3.动态调用方法:使用InvokeMember调用方法
           //动态调用无参数方法
                Type t = typeof(TestClass);
                TestClass ts=new TestClass (1,2);
                int result = (int)t.InvokeMember("show", BindingFlags.InvokeMethod,null,ts,null);
                Console.WriteLine(result);
           //动态调用有参静态方法
                Type t1 = typeof(TestClass);
                int result1 = (int)t1.InvokeMember("show",BindingFlags.InvokeMethod,null,t1,param);
                Console.WriteLine(result1);
    4.使用MethodInfo.Invoke调用方法:

             //使用MethodInfo.Invoke调用方法
                Type t2 = typeof(TestClass);
                TestClass ts2 = new TestClass();
                MethodInfo mi = t2.GetMethod("show",BindingFlags.Instance|BindingFlags.Public);
                int result2=(int)mi.Invoke(ts2, null);
                Console.WriteLine(result2);
    
                Type t3 = typeof(TestClass);
                MethodInfo mi1 = t3.GetMethod("show",BindingFlags.Static|BindingFlags.Public);
                int result3 = (int)mi1.Invoke(null, param);
                Console.WriteLine(result3);


    展开全文
  • * 需求:通过反射,获取该构造方法的使用 * public Person(String name, int age, String address) * * Person p = new Person("mzy", 19, "XXX-xxx-x"); * sysout ...
  • 终于明白怎么通过反射构造内部类对象了。这里头名堂不少,只能一一道来。  首先在 javalang 包下写一个包含内部类的类: package javalang; public class Outer {  public static class Inner1{} }   ...
  • C#反射(Reflection) 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。 您可以使用反射动态地创建...
  • 反射”其实就是利用程序集的元数据信息。 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。 1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = ...
  • 通过反射获取无参构造方法并使用
  • 今天折腾了好一阵子,终于明白怎么通过反射构造内部类对象了。这里头名堂不少,只能一一道来。首先在 javalang 包下写一个包含内部类的类:package javalang;public class Outer { public static class Inner1{}}...
  • 需求:使用泛型创建有参数的对象(性能上考虑,不使用反射创建)。 使用泛型创建无(默认)构造函数的对象可以用 where :T ,new() new T(); 来实现,但是如果构造函数有参数怎么办呢? 于是就写了一下一段...
  • 我们首先会想到继承,将实例化过程写在父类中,子类只要继承这个父类,同时提供私有无参构造函数即可。对,就使用继承,但同时也引出一个问题,怎样能在父类中通过私有构造函数实例化子类实例呢?如果在以前可能没有...
  • 最近笔者有一个想法需要利用反射动态创建对象(如string,int,float,bool,以及自定义类等)来实现,一直感觉反射用不好,特别是当构造函数参数的时候。 MSDN上给出的例子十分复杂,网上的帖子则一般都说很简单...
  • 反射反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结>构、委托、接口和枚举等)的成员和成员的信息。 其实讲道理在讲这个之前应该先用一个博客来讲一下反射的,但是讲...
  • 示例: var type = Type.GetType("JRogerInventory.MainWindow"); var constructor = type.GetConstructor(new[] { type });...var obj = constructor.Invoke(new object[] { this.OwnerWindow });...
  • C# 利用反射生成对象

    2019-03-07 18:15:59
    但是项目2中需要调用项目1 中的一个窗体对象,并获取窗体对象中的一个public变量_SWhere,就想到了用一下反射。在此记录下来以免。也可能各位大神有更加简单的方法,欢迎告诉小弟。若有不对的地方,欢迎指正,及时...
  • 简介 php 从 php5 开始提供了一套完整的反射类,通过反射类可以获取类中的属性、方法、构造...下面将以一个简单的示例来展示一下,如何通过反射来实现构造函数依赖注入。 示例 <?php /** * 通过反射来实现一个...
  • C# 利用反射动态创建对象 在VS.Net中,有很多种方法动态调用对象构造函数。一是通过Activator类的CreateInstance()方法。这个方法我们在Remoting中也用过。它实际上是在本地或从远程创建对象类型,或...
  • 最近笔者有一个想法需要利用反射动态创建对象(如string,int,float,bool,以及自定义类等)来实现,一直感觉反射用不好,特别是当构造函数参数的时候。MSDN上给出的例子十分复杂,网上的帖子则一般都说很简单,...
1 2 3 4 5 ... 20
收藏数 19,471
精华内容 7,788