问题标签 [static-constructor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
2216 浏览

java - 返回静态初始化器

这不是有效的代码:

这是一个愚蠢的例子,但在静态类构造函数中我们不能return;。为什么?这有充分的理由吗?有人对此了解更多吗?

所以我应该这样做的原因return是结束那里的建设。

谢谢

0 投票
4 回答
1023 浏览

c# - 为什么调用嵌套类的方法时不调用父类的静态构造函数?

给定以下代码,为什么在“Main”的第一行之后没有调用“Outer”的静态构造函数?

0 投票
10 回答
24850 浏览

c# - 如何运行静态构造函数?

我想在不创建实例的情况下执行类的静态构造函数(即我想“加载”类)。我怎么做?

额外问题:.NET 4 和旧版本之间有什么区别吗?

编辑:

  • 该类不是静态的。
  • 我想在创建实例之前运行它,因为它需要一段时间才能运行,而且我想避免在第一次访问时出现这种延迟。
  • 静态 ctor 初始化private static readonly字段,因此不能在方法中运行。
0 投票
1 回答
3084 浏览

c# - RunClassConstructor 是否保证只运行一次类型的静态构造函数?

我正在使用以下代码调用一个类的静态 ctor:

这会导致 cctor 运行两次吗?

0 投票
4 回答
14604 浏览

c# - 静态只读字段初始化器与静态构造器初始化

以下是初始化静态只读字段的两种不同方法。这两种方法有区别吗?如果是,什么时候应该优先选择一个?

0 投票
3 回答
19222 浏览

c# - 将静态参数传递给类

据我所知,您不能将参数传递给 C# 中的静态构造函数。但是,在创建类的实例之前,我确实需要传递 2 个参数并将它们分配给静态字段。我该怎么做?

0 投票
4 回答
4214 浏览

c# - 静态构造函数可以在非静态构造函数之后运行。这是编译器错误吗?

以下程序的输出是:

这是编译器错误吗?我期望:

因为我认为静态构造函数总是在非静态构造函数之前调用。

我在 Visual Studio 2010 中使用 .net 3.5 和 .net 4.0 对此进行了测试。

0 投票
1 回答
1727 浏览

gcc - 独立的 ARM C++ 代码 - 空的 .ctors 部分

我正在编写 C++ 代码以在独立环境(基本上是 ARM 板)中运行。除了我遇到了一个绊脚石 - 全局静态构造函数之外,它一直进展顺利。

据我了解,.ctors 部分包含每个静态构造函数的地址列表,我的代码只需要迭代这个列表并随时调用每个函数。但是,我发现我的二进制文件中的这一部分实际上是完全空的!谷歌指出使用“.init_array”而不是“.ctors”(一种 EABI 事物),但这并没有改变任何东西。

关于为什么我的静态构造函数不存在的任何想法?相关链接描述文件和 objdump 输出如下:

--

我正在使用一个针对 arm-elf 的 GCC 编译器(4.4.1)。

更新:输出二进制文件也充满了__static_initialization_and_destruction_0我以前从未见过的符号。

更新 2:这是已编译目标文件(链接到主二进制文件)的 objdump 的摘录,其中 .ctors 部分完好无损:

0 投票
4 回答
10650 浏览

c# - 公共构造函数和静态构造函数

我正在阅读使用两个构造函数的 C# 代码。一个是静态的,另一个是公共的。这两个构造函数有什么区别?我们必须使用静态构造函数吗?

0 投票
7 回答
1862 浏览

c# - 为什么 CLR 不总是调用值类型构造函数

我有一个关于Value type 中的类型构造函数的问题。这个问题的灵感来自 Jeffrey Richter 通过 C# 第 3 版在 CLR 中编写的内容,他说(在第 195 页 - 第 8 章)您永远不应该在值类型中实际定义类型构造函数,因为有时 CLR 不会调用它。

因此,例如(嗯......实际上是 Jeffrey Richters 的例子),即使通过查看 IL,我也无法弄清楚为什么在以下代码中没有调用类型构造函数:

因此,将以下规则应用于类型构造函数,我只是看不出为什么根本不调用上面的值类型构造函数。

  1. 我可以定义一个静态值类型构造函数来设置类型的初始状态。
  2. 一种类型只能有一个构造函数——没有默认构造函数。
  3. 类型构造函数是隐式私有的
  4. JIT 编译器检查该类型的类型构造函数是否已在此 AppDomain 中执行。如果不是,它将调用发送到本机代码,否则它不会因为它知道类型已经“初始化”。

所以......我只是无法弄清楚为什么我看不到正在构造的这种类型数组。

我最好的猜测是它可能是:

  1. CLR 构造类型数组的方式。我原以为创建第一个项目时会调用静态构造函数
  2. 构造函数中的代码未初始化任何静态字段,因此被忽略。我已经尝试在构造函数中初始化私有静态字段,但该字段仍然是默认的 0 值 - 因此不调用构造函数。
  3. 或者......由于设置了公共 Int32,编译器以某种方式优化了构造函数调用 - 但这充其量只是一个模糊的猜测!

除了最佳实践等,我只是对它非常感兴趣,因为我希望自己能够看到为什么它没有被调用。

编辑:我在下面添加了对我自己的问题的答案,只是引用了 Jeffrey Richter 所说的话。

如果有人有任何想法,那就太好了。非常感谢,詹姆斯