如果有人问过这个问题,我不会感到害羞。我找不到了。
class Program
{
static void Main(string[] args)
{
new ExampleClass();
ExampleClass example = new ExampleClass();
}
}
class ExampleClass
{
public ExampleClass()
{
//Do Stuff
}
}
第一次初始化更快?第二个在编译时获得优化。 (因为从未使用过可变的例子)
答案 0 :(得分:2)
第一次初始化更快?
没有任何远程重要的方式,所以为什么要关心?但是,只是为了幽默你,两个选项的IL输出,当用优化编译时,是相同的:
// Methods
.method private hidebysig static
void Main (
string[] args
) cil managed
{
// Method begins at RVA 0x2050
// Code size 7 (0x7)
.maxstack 8
IL_0000: newobj instance void ExampleClass::.ctor()
IL_0005: pop
IL_0006: ret
} // end of method Program::Main
所以不,没有区别。
假设从未使用过可变的例子
为什么要实例化一个你永远不会使用的对象?如果你想要实现的只是运行一些初始化逻辑,那么实现一个恰当命名的静态方法:
class ExampleClass
{
static void Initialize() { // do stuff }
}
你以一种不那么令人不安的方式称呼它:
static void Main(string[] args)
{
ExampleClass.Initialize();
}
答案 1 :(得分:0)
我想说这与编译器在这种情况下的作用无关。
实际上,毫无疑问,在这两种情况下都会执行ExampleClass构造函数中的代码。 可能是编译器在这个非常具体(而且相当简单)的场景中优化了内存使用,但是如果从未使用过变量,那么为什么要创建一个ExampleClass的新实例呢?您可能更喜欢实用方法或帮助程序(可能是静态的)。
通常,您使用对象来更好地处理和表示数据,保留引用并从有用的开发样式和设计模式中受益,例如Dependency Injection。
否则,仅使用方法或静态助手就足够了。