如果有人问我,我不会舒尔。我找不到它。
class Program
{
static void Main(string[] args)
{
new ExampleClass();
ExampleClass example = new ExampleClass();
}
}
class ExampleClass
{
public ExampleClass()
{
//Do Stuff
}
}
第一次初始化更快吗?剂量第二个在编译时得到优化。(假设从不使用可变示例(
第一次初始化更快吗?
没有任何意义重大的方式,所以为什么还要关心呢?但是,为了让您感到幽默,这两个选项的 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();
}
说编译器在这种情况下做什么无关紧要。
事实上,毫无疑问,在这两种情况下,示例类构造函数中的代码都会被执行。可能是编译器在这个非常具体(且相当简单(的场景中优化了内存使用,但是如果变量从未使用过,那么为什么要创建 ExampleClass 的新实例呢?您可能更喜欢实用工具方法或帮助程序(可能是静态的(。
通常,您可以使用对象来更好地处理和表示数据,保留引用,并通过有用的开发样式和设计模式(如依赖项注入(受益。
否则,仅使用方法或静态帮助程序可能就足够了。