c# - Activator.CreateInstance 和使用表达式之间有明显的区别吗?

标签 c#

使用这段代码:

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/

相关文章:

C#:使用模数数学递减时钟

c# - 将注册表字符串值读入列表

c# - 使用 SharpDX 绘制 SVG 图形

C# POS 打印机 API : can't find printer

c# - 在 C# 中创建自定义应用程序链接(ed2k 链接样式)

c# - Linq 到 RSS 提要?

c# - SQLite 记录是如何更新的?

c# - 如何在 C# 中使用 Interop 删除 Word 密码

c# - Visual Studio 2010 : How to output all projects under a solution to the same directory

c# - 当公式包含 TRIM 函数时 EPPlus cell.calculate() 错误