【问题标题】:When will the fields in abstract class get initialized抽象类中的字段什么时候初始化
【发布时间】:2014-11-18 02:24:16
【问题描述】:

我有一个像

这样的抽象类
public abstract class BaseController
    {
        private static string stype;
        protected abstract List<int> integers();

        public List<int> Execute()
        {

            return this.integers();

        }

    }
}

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

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

那么我想了解的是,上面类中的私有静态字段什么时候会被初始化呢?

谢谢

【问题讨论】:

    标签: c# .net static-members


    【解决方案1】:

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

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

    (*) 保证实际上比这更严格一些,但是恕我直言,大多数人关心的实际问题是在初始化之前是否可以访问该字段,而答案是“不,不低于正常情况”。 Jon Skeet 在过去不止一篇文章中讨论过这个问题。这是其中之一:C# and beforefieldinit

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多