相关疑难解决方法(0)

静态只读字段初始化程序与静态构造函数初始化

以下是初始化静态只读字段的两种不同方法.两种方法之间有区别吗?如果是的话,什么时候应该优先于另一个呢?

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)

c# static-constructor initializer c#-3.0 c#-2.0

38
推荐指数
3
解决办法
1万
查看次数

为什么静态字段初始化发生在静态构造函数之前?

以下代码:

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?之前?

.net c# static

12
推荐指数
1
解决办法
4031
查看次数

标签 统计

c# ×2

.net ×1

c#-2.0 ×1

c#-3.0 ×1

initializer ×1

static ×1

static-constructor ×1