使用这段代码:
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
参数的公共(public)构造函数。
而且它可能更慢,因为它使用了反射。
关于c# - Activator.CreateInstance 和使用表达式之间有明显的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28672328/