【问题标题】:Define field in static class [duplicate]在静态类中定义字段[重复]
【发布时间】:2016-07-18 15:42:04
【问题描述】:

我有以下带有静态字段的静态类:

public static class IncludeExtender {

  private static readonly MethodInfo _include = typeof(EntityFrameworkQueryableExtensions).GetTypeInfo();

}

上一个例子和下一个在类构造函数中定义字段值的例子有什么区别吗?

public static class IncludeExtender {

  private static readonly MethodInfo _include;

  static IncludeExtender() {
    _include = typeof(EntityFrameworkQueryableExtensions).GetTypeInfo();
  }

}

什么是最好的选择?

【问题讨论】:

  • terms中的什么定义?
  • 对您将使用哪种方法有任何建议吗?
  • 视情况而定...如果您的分配是线程化的,前者可能更好,因为它可以进行更多优化。

标签: c#


【解决方案1】:

不,它们是相同的。 readonly-修饰符声明成员值可能仅在对象初始化期间更改。这要么直接在类体内,要么在构造函数中。

但是,通过在构造函数中初始化变量,您可以在前面添加影响值的进一步逻辑,例如,您可以根据特定条件更改值。看到这个:

static IncludeExtender() {
    var a = "Test";
    _include = a.GetType().GetTypeInfo();
  }

【讨论】:

  • 不完全正确,如果构造函数没有运行,那么前一个示例将不会执行,因为后者在构造函数运行之前运行。
  • @Jay 如果您以任何方式引用该类,静态构造函数肯定会运行。所以两者都会产生相同的结果。
  • 想一想……如果你OOM,它将如何运行?此外,在外部分配的成员可能会或可能不会被分配。
  • 还可以在初始化期间多次更改readonly 字段。它只保证在静态构造函数已经(或将要)执行后该字段不会被修改。
  • @Kyle 是的,你说得对,我已经更新了这个。
猜你喜欢
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 2021-08-03
  • 1970-01-01
相关资源
最近更新 更多