zoukankan      html  css  js  c++  java
  • C# Activator.CreateInstance()

    C#在类工厂中动态创建类的实例,所使用的方法为:

    1. Activator.CreateInstance (Type)

    2. Activator.CreateInstance (Type, Object[])

     

    两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数。

    //Activator.CreateInstance(Type)

    object result = null;
    Type typeofControl =null;

    typeofControl = Type.GetType(vFullClassName);
    result = Activator.CreateInstance(typeofControl);

    //Activator.CreateInstance(Type,Object[])

    object result = null;
    Type typeofControl =null;

    typeofControl = Type.GetType(vFullClassName);
    result = Activator.CreateInstance(typeofControl, objParam);

    但是在动态创建时,可能会动态使用到外部应用的DLL中类的实例,则此时需要进行反编译操作,使用Reflection命名控件下的Assembly类。

    //先使用Assembly类载入DLL,再根据类的全路径获取类

    object result = null;
    Type typeofControl = null;
    Assembly tempAssembly;

    tempAssembly = Assembly.LoadFrom(vDllName);
    typeofControl = tempAssembly.GetType(vFullClassName);
    result = Activator.CreateInstance(typeofControl, objParam);

    参考处处:http://blog.csdn.net/jaydawson/article/details/5539438

    --------------------------------------------------

    参考二:

    --------------------------------------------------

    Activator.CreateInstance 方法 (Type) 

    使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。

    命名空间:System
    程序集:mscorlib(在 mscorlib.dll 中) 

    C# 
    public static Object CreateInstance (Type type)

    Activator.CreateInstance 泛型方法 ()

    注意:此方法在 .NET Framework 2.0 版中是新增的。

    创建类型的一个实例,该类型由指定的泛型类型参数指定。

    命名空间:System
    程序集:mscorlib(在 mscorlib.dll 中)

    C# 
    public static T CreateInstance<T> ()
    Activator.CreateInstance 
    (Type)实例
    输入一个类的名称为参数,返回一个相应的类的实例。
    这在工厂模式中是非常有用的,这样,可以使程序有更高的扩展性 
    复制代码
    /*
     * Created by SharpDevelop.
     * User: 19004991
     * Date: 2009-8-6
     * Time: 9:10
     */
    using System;

    namespace ActivatorCreateInstance
    {
        public interface IObject
        {
            void printName();
        }
        
        public class ClassExam : IObject
        {
            private string name="default name";
            
            public ClassExam()
            {
            }
            
            public ClassExam(string name)
            {
                this.name = name;
            }
            
            public void printName()
            {
                Console .WriteLine (this.name );
            }
        }
        
        public class Program
        {
            public Program()
            {
            }
            
            public static void Main(string[] args)
            {
                // TODO: Implement Functionality Here
                
                IObject obj1=(IObject)Activator.CreateInstance(System.Type.GetType ("ActivatorCreateInstance.ClassExam"));
                
                obj1.printName();
                
                IObject obj2=(IObject)Activator.CreateInstance(System.Type.GetType("ActivatorCreateInstance.ClassExam"),new string[]{"seted new name"});
                
                obj2.printName();
                
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
            }
        }
    }
    复制代码

    网上代码System.Type.GetType内为"ActivatorCreateInstance.ClassExam,ActivatorExample"编译失败
  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/Tmc-Blog/p/4227025.html
Copyright © 2011-2022 走看看