none
Assembly.CreateInstance方法和Activator.CreateInstance方法有什么共同点和区别??什么时候可以相互替换使用?? RRS feed

  • 问题

  • Assembly.CreateInstance方法和Activator.CreateInstance方法有什么共同点和区别??什么时候可以相互替换使用??
    2009年7月29日 1:49

答案

  • 您好,请参考:
    Assembly.CreateInstance的方法最终是调用Activator.CreateInstance方法来创建实例的。
    Assembly.CreateInstance有几个重载方法最终调用的是如下方法:
    public Object CreateInstance(String typeName,
                                         bool ignoreCase,
                                         BindingFlags bindingAttr,
                                         Binder binder,
                                         Object[] args,
                                         CultureInfo culture,
                                         Object[] activationAttributes)
            {
                Type t = GetType(typeName, false, ignoreCase);
                if (t == null) return null;
                return Activator.CreateInstance(t,
                                                bindingAttr,
                                                binder,
                                                args,
                                                culture,
                                                activationAttributes);
            }

    同时Activator.CreateInstance本身有很多重载的方法,大致可以分为两大类:
    1、返回ObjectHandle对象 (目的是为了在应用程序域间可以按引用传递,这类方法第一个参数是程序集名称)
    2、返回Object对象 (创建当前应用程序域的实例,这类方法的第一个参数是Type)

    Assembly.CreateInstance调用的是Activator.CreateInstance的第二类方法。
    2009年7月29日 3:36
  • 你好 如果你反编译 比如用Reflector查看的话 实际上Assembly.CreateInstance 也是调用的Activator.CreateInstance方法

    public object CreateInstance(string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
    {
        Type type = this.GetType(typeName, false, ignoreCase);
        if (type == null)
        {
            return null;
        }
        return Activator.CreateInstance(type, bindingAttr, binder, args, culture, activationAttributes);
    }
    

    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月29日 5:38
    版主

全部回复

  • 您好,请参考:
    Assembly.CreateInstance的方法最终是调用Activator.CreateInstance方法来创建实例的。
    Assembly.CreateInstance有几个重载方法最终调用的是如下方法:
    public Object CreateInstance(String typeName,
                                         bool ignoreCase,
                                         BindingFlags bindingAttr,
                                         Binder binder,
                                         Object[] args,
                                         CultureInfo culture,
                                         Object[] activationAttributes)
            {
                Type t = GetType(typeName, false, ignoreCase);
                if (t == null) return null;
                return Activator.CreateInstance(t,
                                                bindingAttr,
                                                binder,
                                                args,
                                                culture,
                                                activationAttributes);
            }

    同时Activator.CreateInstance本身有很多重载的方法,大致可以分为两大类:
    1、返回ObjectHandle对象 (目的是为了在应用程序域间可以按引用传递,这类方法第一个参数是程序集名称)
    2、返回Object对象 (创建当前应用程序域的实例,这类方法的第一个参数是Type)

    Assembly.CreateInstance调用的是Activator.CreateInstance的第二类方法。
    2009年7月29日 3:36
  • 你好 如果你反编译 比如用Reflector查看的话 实际上Assembly.CreateInstance 也是调用的Activator.CreateInstance方法

    public object CreateInstance(string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
    {
        Type type = this.GetType(typeName, false, ignoreCase);
        if (type == null)
        {
            return null;
        }
        return Activator.CreateInstance(type, bindingAttr, binder, args, culture, activationAttributes);
    }
    

    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月29日 5:38
    版主