问题标签 [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.
java - 返回静态初始化器
这不是有效的代码:
这是一个愚蠢的例子,但在静态类构造函数中我们不能return;
。为什么?这有充分的理由吗?有人对此了解更多吗?
所以我应该这样做的原因return
是结束那里的建设。
谢谢
c# - 为什么调用嵌套类的方法时不调用父类的静态构造函数?
给定以下代码,为什么在“Main”的第一行之后没有调用“Outer”的静态构造函数?
c# - 如何运行静态构造函数?
我想在不创建实例的情况下执行类的静态构造函数(即我想“加载”类)。我怎么做?
额外问题:.NET 4 和旧版本之间有什么区别吗?
编辑:
- 该类不是静态的。
- 我想在创建实例之前运行它,因为它需要一段时间才能运行,而且我想避免在第一次访问时出现这种延迟。
- 静态 ctor 初始化
private static readonly
字段,因此不能在方法中运行。
c# - RunClassConstructor 是否保证只运行一次类型的静态构造函数?
我正在使用以下代码调用一个类的静态 ctor:
这会导致 cctor 运行两次吗?
c# - 静态只读字段初始化器与静态构造器初始化
以下是初始化静态只读字段的两种不同方法。这两种方法有区别吗?如果是,什么时候应该优先选择一个?
c# - 将静态参数传递给类
据我所知,您不能将参数传递给 C# 中的静态构造函数。但是,在创建类的实例之前,我确实需要传递 2 个参数并将它们分配给静态字段。我该怎么做?
c# - 静态构造函数可以在非静态构造函数之后运行。这是编译器错误吗?
以下程序的输出是:
这是编译器错误吗?我期望:
因为我认为静态构造函数总是在非静态构造函数之前调用。
我在 Visual Studio 2010 中使用 .net 3.5 和 .net 4.0 对此进行了测试。
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 部分完好无损:
c# - 公共构造函数和静态构造函数
我正在阅读使用两个构造函数的 C# 代码。一个是静态的,另一个是公共的。这两个构造函数有什么区别?我们必须使用静态构造函数吗?
c# - 为什么 CLR 不总是调用值类型构造函数
我有一个关于Value type 中的类型构造函数的问题。这个问题的灵感来自 Jeffrey Richter 通过 C# 第 3 版在 CLR 中编写的内容,他说(在第 195 页 - 第 8 章)您永远不应该在值类型中实际定义类型构造函数,因为有时 CLR 不会调用它。
因此,例如(嗯......实际上是 Jeffrey Richters 的例子),即使通过查看 IL,我也无法弄清楚为什么在以下代码中没有调用类型构造函数:
因此,将以下规则应用于类型构造函数,我只是看不出为什么根本不调用上面的值类型构造函数。
- 我可以定义一个静态值类型构造函数来设置类型的初始状态。
- 一种类型只能有一个构造函数——没有默认构造函数。
- 类型构造函数是隐式私有的
- JIT 编译器检查该类型的类型构造函数是否已在此 AppDomain 中执行。如果不是,它将调用发送到本机代码,否则它不会因为它知道类型已经“初始化”。
所以......我只是无法弄清楚为什么我看不到正在构造的这种类型数组。
我最好的猜测是它可能是:
- CLR 构造类型数组的方式。我原以为创建第一个项目时会调用静态构造函数
- 构造函数中的代码未初始化任何静态字段,因此被忽略。我已经尝试在构造函数中初始化私有静态字段,但该字段仍然是默认的 0 值 - 因此不调用构造函数。
- 或者......由于设置了公共 Int32,编译器以某种方式优化了构造函数调用 - 但这充其量只是一个模糊的猜测!
除了最佳实践等,我只是对它非常感兴趣,因为我希望自己能够看到为什么它没有被调用。
编辑:我在下面添加了对我自己的问题的答案,只是引用了 Jeffrey Richter 所说的话。
如果有人有任何想法,那就太好了。非常感谢,詹姆斯