gpt4 book ai didi

c# - 一个类在静态构造函数中创建自己的实例是否安全?

转载 作者:太空狗 更新时间:2023-10-29 19:41:32 25 4
gpt4 key购买 nike

我偶然发现了一个问题,我需要在它的静态构造函数中有一个类的实例。我认为这是不可能的,所以我尝试了以下方法:

class Program
{
static void Main(string[] args)
{
Console.WriteLine(Foo.someString);
Console.ReadLine();
}
}

class Foo
{
public static readonly string someString;

static Foo()
{
someString = new Foo().CreateString();
}

private string CreateString()
{
return "some text";
}
}

令我惊讶的是,它有效——输出是“一些文本”。我相信静态构造函数必须在创建类的实例之前运行并完成。 This answer表明情况不一定如此。这是否意味着静态构造函数和实例构造函数彼此独立?最后,这样做是否安全(在静态构造函数中创建实例)?

附注让我们忽略一个事实,即可以通过使用不同的方法来避免这种情况。

最佳答案

所有specification说的是静态构造函数将在创建类的任何实例之前被调用。但它没有说明此构造函数必须完成这一事实:

A static constructor is used to initialize any static data, or to perform a particular action that needs to be performed once only. It is called automatically before the first instance is created or any static members are referenced.

您可以完美地在静态构造函数中创建该类的实例,这是安全的。

关于c# - 一个类在静态构造函数中创建自己的实例是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9359044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com