我在 Java 中发现了一些相关问题,但没有找到与 C# 相关的问题,因此请原谅任何重复的问题。
又短又甜,有什么区别?有没有?
public static class Foo
{
public static List<Bar> Bars;
static Foo()
{
Bars = new List<Bar>();
}
}
public static class Foo
{
public static List<Bar> Bars = new List<Bar>();
}
有关非静态类情况的答案,请参阅@Nick G 的评论。我仍然想知道它是否对静态类有不同的影响。
现在它们也不必是静态的。这个案子怎么样?
public class Foo
{
public List<Bar> Bars;
public Foo()
{
Bars = new List<Bar>();
}
}
public class Foo
{
public List<Bar> Bars = new List<Bar>();
}
不,那里没有,
根据IL
,静态内联初始化程序使用构造函数,看看发生了什么:
1)静态内联初始化器:
static class SomeClass
{
public static string strField = "Some String";
static SomeClass()
{
}
}
and the IL
:
.method private hidebysig specialname rtspecialname static
void .cctor() cil managed
{
// Code size 12 (0xc)
.maxstack 8
IL_0000: ldstr "Some String"
IL_0005: stsfld string forStackoverflow.SomeClass::strField
IL_000a: nop
IL_000b: ret
} // end of method SomeClass::.cctor
2)构造函数:
static class SomeClass
{
public static string strField;
static SomeClass()
{
strField = "Some String";
}
}
and the IL
:
.method private hidebysig specialname rtspecialname static
void .cctor() cil managed
{
// Code size 12 (0xc)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Some String"
IL_0006: stsfld string forStackoverflow.SomeClass::strField
IL_000b: ret
} // end of method SomeClass::.cctor
所以,从编译器的角度来看,不,没有区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)