我在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>();
}
击> <击> 撞击>
答案 0 :(得分:1)
不,没有,
根据IL
,静态内联初始值设定项使用构造函数,看看发生了什么:
1)静态内联初始化程序:
static class SomeClass
{
public static string strField = "Some String";
static SomeClass()
{
}
}
和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";
}
}
和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
所以,从编译器view-sight,不,没有区别。