问题标签 [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 投票
1 回答
560 浏览

.net - 父类和子类的静态构造函数是按什么顺序调用的?

父类和子类的静态构造函数是按什么顺序调用的?

我现在可以测试它......如果我有可用的编译器。

0 投票
1 回答
1092 浏览

.net - .NET 接口上的静态构造函数未运行

您可以在 IL 中的 .NET 接口上定义静态构造函数。但是,如果这样做,则在接口上运行方法时不会运行静态构造函数:

这里发生了什么?CLR 规范 (Partition II, 10.5.3.1) 说当类型初始化器被执行时是在 Partition I 中指定的,但是我在 Partition I 中找不到任何类型初始化器执行的引用。

编辑:

可以让接口静态初始化程序运行,但只能通过向接口添加一个静态字段,并在代码中的某处访问该字段,即使该字段实际上并未在静态构造函数中分配。因此,似乎在接口上调用方法不会使静态构造函数运行,但访问字段却可以。为什么会这样?规范中在哪里提到了这一点?

0 投票
5 回答
7898 浏览

c++ - 在 C++ 中没有静态构造函数的理由是什么?

在 C++ 中没有静态构造函数的理由是什么?

如果允许,我们将在一个地方以一种非常有组织的方式初始化其中的所有静态成员,如下所示:

在没有静态构造函数的情况下,很难有静态向量,并用值填充它,如上所示。静态构造函数优雅地解决了这个问题。我们可以以非常有组织的方式初始化静态成员。

那么为什么'C++'没有静态构造函数呢?毕竟,其他语言(例如 C#)都有静态构造函数!

0 投票
6 回答
3051 浏览

c++ - 在 C++ 中模仿静态构造函数

这是一个与 C++ 中对象的初始化有关的问题。

我有一组类(不是实例),继承自一个公共基类,我需要它们在程序启动时在容器(特别是地图)中注册有关自己的信息。

问题是我需要它是动态的。容器是在一个独立的项目中定义的,不同于类。我宁愿避免制作该库的多个硬编码版本,每个使用它的程序中的每组类都有一个版本。

我考虑在每个子类中都有一个特殊类的静态实例,这将在其构造函数中进行注册。但是,我发现没有办法保证容器会在这些对象的构造之前被构造。

我还应该注意,容器中有关子类的信息应该在创建这些子类的任何实例之前可用。

有没有办法做到这一点,或者一般模仿 C++ 中的静态构造函数?

0 投票
1 回答
4996 浏览

c# - 覆盖静态构造函数中的元数据?

我有一个继承类的TextBox类,调用它MyTextBox

我想重新定义Background这个类的默认值。

所以我寻找了一种方法,并找到了一个不错的选择:调用BackgroundProperty.OverrideMetadata()

麻烦的是:我可以把这个放在哪里?

App.OnStartup()?丑陋且不实用,我希望它出现在我班级的代码文件中。

在类的构造函数中?我得到一个例外:

PropertyMetadata 已为“MyTextBox”类型注册。

(对我来说似乎很好,我明白为什么我能完美地做到这一点)

所以我再次查看了关于 C# 中的静态构造函数的发现(之前并没有,真可惜)

所以这是我的代码:

现在,我对此很满意,但微软却不是。也就是说,当我使用代码分析功能时,我得到了这个:

CA1810:内联初始化引用类型静态字段

因此我的问题是:我能做些什么呢?

  • 忽略警告?>> 我不喜欢忽略警告
  • 将调用移至 overrideMetadata 方法?>> 我想,但在哪里?

欢迎任何提示,谢谢

编辑:我要补充一点,我不完全理解为什么我会收到这个警告,因为我没有在我的静态构造函数中初始化任何东西,或者是吗?

0 投票
3 回答
698 浏览

c# - 为什么 C# 静态构造函数需要括号?

考虑:

为什么()需要 in static Foo() {...}?静态构造函数必须始终是无参数的,那何必呢?它们是否有必要避免一些解析器的歧义,或者只是为了保持与常规无参数构造函数的一致性?

因为它看起来很像一个初始化程序块,所以我经常发现自己不小心把它们排除在外,然后不得不考虑几秒钟来思考哪里出了问题。如果可以以相同的方式省略它们,那就太好了。

0 投票
2 回答
291 浏览

c# - .NET 类加载器是否有标准的工作方式?

.NET 类加载器是否有标准的工作方式?

假设我编译了这段代码:

我能保证编译后的代码(在所有实现的平台上)有以下输出吗?

0 投票
4 回答
1771 浏览

c# - .Net:访问常量时是否调用静态构造函数?

所以这就是我的想法......

这会工作还是我需要使用类似的东西static readonly 财产字段触发静态构造函数?

0 投票
3 回答
6432 浏览

c# - c#静态构造函数不是从派生类调用的

任何想法如何使其工作,以便对 Buss 中的静态字段的引用触发 Bus 中的静态构造函数?

0 投票
3 回答
1588 浏览

c# - 为什么不是所有的静态构造函数都在 C# 中调用(即父类的构造函数)?

我有三个班级BaseDerivedFinalDerived源自BaseFinal源自Derived。所有三个类都有一个静态构造函数。类Derived作为一个名为Setup. 当我调用 时Final.Setup,我希望所有三个静态构造函数都被执行,但只有一个 inDerived被运行。

这是示例源代码:

这对我来说只是部分意义。我知道调用Final.Setup()实际上只是 的别名Derived.Setup(),因此跳过静态构造函数Final似乎很公平。但是,为什么不Base调用静态构造函数呢?

我可以通过调用 的无操作静态方法Base或访问Base. 但我想知道:这种明显奇怪的行为背后的原因是什么?