C# 抽象类中的字段何时初始化

C# 抽象类中的字段何时初始化,c#,.net,static-members,C#,.net,Static Members,我有一个抽象类,比如 public abstract class BaseController { private static string stype; protected abstract List<int> integers(); public List<int> Execute() { return this.integers(); }

我有一个抽象类,比如

public abstract class BaseController
    {
        private static string stype;
        protected abstract List<int> integers();

        public List<int> Execute()
        {

            return this.integers();

        }

    }
}
我有两个类继承自这个basecontroller类

两个派生类都通过启动线程从类中调用了它们的方法

所以我想了解的是,上面类中的私有静态字段何时将被初始化


谢谢

你的问题实际上比你可能猜到的要复杂得多。但简短的版本是:CLR保证一个类型的所有静态成员将在不晚于第一次使用该成员时初始化*

在您的示例中,静态字段stype从未赋值,因此它的默认值始终为null。CLR将在任何代码访问该字段之前将其初始化为该值

*实际上,保证比这严格一点,但大多数人关心的实际问题是,字段在初始化之前是否可以访问,答案是否定的,在正常情况下不是。Jon Skeet在过去不止一篇文章中讨论过这一点;以下是其中之一: