繁体   English   中英

Activator.CreateInstance与使用表达式之间是否存在明显差异?

[英]Is there a noticible difference between Activator.CreateInstance and using expressions?

使用此代码:

public static class ChocolateFactory<T>
{
    private static Func<int, int, T> Func { get; set; }

    static ChocolateFactory()
    {
        ChocolateFactory<EmergencyChocolate>.Func = (a, b) => new EmergencyChocolate(a, b);
    }

    public static T CreateChocolate(int a, int b)
    {
        return (T)Activator.CreateInstance(typeof(T), a, b);
        //return ChocolateFactory<T>.Func(a, b);
    }
}

如果我跑:

var myChocolate = ChocolateFactory<EmergencyChocolate>.CreateChocolate(1, 2);

两种创作方法之间是否存在显着差异(一种是注释掉的)? Activator在代码方面更清晰但我知道它可能会更慢,但我想知道我是否忽略了其他任何东西。 我也想知道这里是否有任何预编译的内容。

此外,如果不使用Activator,这里的方法名称是什么?

如果使用Activator.CreateInstance则不会进行静态检查。 编译器无法检查是否存在具有两个int参数的公共构造函数。

它可能更慢,因为它使用反射。

使用激活器类,您可以通过只有一个方法生成任何类型的实例。

使用工厂方法,您只能创建一个类的实例,而对于另一个类,您必须创建不同的工厂方法。

激活剂并不比另一个更清洁。 这取决于你想做什么。 IoC容器通常使用Activator,因为它无法为您的所有类创建工厂方法,因为它根本不知道您拥有的是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM