以下是初始化静态只读字段的两种不同方法.两种方法之间有区别吗?如果是的话,什么时候应该优先于另一个呢?
class A
{
private static readonly string connectionString =
WebConfigurationManager.ConnectionStrings["SomeConnection"].ConnectionString;
}
class B
{
private static readonly string connectionString;
static B()
{
connectionString =
WebConfigurationManager.ConnectionStrings["SomeConnection"].ConnectionString;
}
}
Run Code Online (Sandbox Code Playgroud) 以下代码:
static void Main(string[] args)
{
Console.WriteLine("0");
string h = Foo.X;
Console.WriteLine("2");
}
public static class Foo
{
public static string X = ((Func<string, string>)delegate(string g)
{
Console.WriteLine(g);
return (g);
})("_aaa");
static Foo()
{
Console.WriteLine("ctor");
}
}
Run Code Online (Sandbox Code Playgroud)
将打印:
0
_aaa
ctor
2
Run Code Online (Sandbox Code Playgroud)
我知道beforefieldinit行为(有/没有静态构造函数等).
我不明白的是为什么ctor(在输出中)之后 _aaa?
它没有任何意义,如果我想在构造函数中初始化变量怎么办?
题
为什么初始化X是在ctor?之前?