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

c# - 在调用程序集中的任何方法之前,CLR 调用的最早入口点是什么?

在过去的几年里,我偶尔会想知道DLL_PROCESS_ATTACH在 .NET 世界中有什么等价的(臭名昭著的)。我所说的任何文档都稍微简化了一点,即类的最早入口点是静态构造函数(cctor),但是您无法影响调用它的时间也不能定义一个保证在任何其他 cctor 之前调用的 cctor或字段初始化程序,hack,如果从未使用过该类,它甚至可能根本不会被调用。

所以,如果你想保证在你的程序集的任何方法被调用之前已经初始化了一些东西,并且你不想在你的程序集中的每个类中添加一个 cctor,你可以采取什么方法?或者,我多年来一直错过的 .NET 中是否有一个简单的托管解决方案?

0 投票
3 回答
406 浏览

c# - 如何实现静态字典在 C# 的运行时使用参数?

我有以下代码:

但是我决定我需要在字典中添加一个整数Dictionary<ScraperMasterUriDetails>,所以我想我应该在构造函数中添加属性和一些参数。

但是,你不能在 C# 中做到这一点。我如何实现我想要实现的东西?

编辑:

一位更有经验的成员编辑了我的帖子,所以我将保持原样。我不在乎使用字典(当时使用正确)

本质上,我只想以结构方式列出三种类型的数据,但我总是想引用一次存储值的类的实例,因此是静态的。现在我总是做 List of(T) 之类的:

然后做了以下

但是在这种情况下,我想要类似于上面的东西,但是是静态的(不想创建实例等。我非常感谢所有建议,因此我编辑了我的帖子以提供更多信息。

作为说明,我可能想使用 LINQ 来提取一些记录,例如 get record where guid == guid 等。这就是我将使用它的全部内容。

0 投票
3 回答
987 浏览

c# - C# 静态垃圾收集器?

我有一个简单的类,它有一个静态构造函数和一个实例构造函数。现在当我初始化类时,静态和实例构造函数都被调用。只有静态在应用程序域中被引用一次。我可以再次调用相同的类初始化和静态构造函数再次初始化吗?我试过了,但没有发生?在对类使用垃圾收集之后,有什么方法可以在 main() 方法中再次调用静态构造函数。

这是代码:

现在在 main 方法调用中:

输出:

静态构造函数调用实例构造函数调用实例构造函数调用

现在静态没有再次调用。因为它在应用程序域中被调用一次。但是他们是否可以在不卸载应用程序域的情况下再次调用它。我们可以在这里使用 GC 类吗?

谢谢。朋友

0 投票
3 回答
8187 浏览

c# - C# 实例构造函数与静态构造函数

两者有什么区别?我只使用了一种构造函数,我相信它是静态构造函数。只熟悉 C++ 和 Java。

0 投票
2 回答
3345 浏览

c# - 强制类加载

C# 或 .net IL 中是否有办法强制具有类型初始值设定项(静态构造函数)的类加载自身,而不访问其任何参数?

假设我有课

有没有办法让这条线打印?

请注意,该类是静态的,因此我无法实例化它来强制初始化,并且它没有公共成员,因此我无法访问它们来启动它。

0 投票
2 回答
161 浏览

c# - 静态字段的奇怪行为

我正在尝试使自定义枚举类正常工作,它应该使我能够创建具有用户友好标识符和任意关联值的枚举。到目前为止,一切都很好:

现在我的问题:

下面的语句给了我 0,而不是 2。我认为问题是由于 beforefieldinit 造成的。我可以通过直接调用特定枚举的某些方法来解决这个问题,这会强制加载静态字段,但我认为这不是最好的解决方案。

提示:请不要在这里为枚举提出某种 [UserfriendlyName()] 属性,我已经知道了。

编辑 谢谢,汉斯。我自己的代码确实有错字,调用了错误的通用专业化。

现在我的问题是,我可以摆脱每个子类中 ItemList 的重新定义,但似乎这是初始化静态字段的必要条件。

0 投票
2 回答
1741 浏览

c# - 如何显式运行未知类型的静态构造函数?

可能重复:
如何使用反射调用静态构造函数?

我在各种类的静态构造函数中有一些初始化代码。我无法创建实例,也无法提前知道类型。我想确保加载类。

我试过这个:

但是得到了 MemberAccessException: Type initializer was not callable。

我假设这是因为 cctor 是私人的?有没有办法在不改变架构的情况下解决这个问题?

编辑:我找到了一种使用 的解决方法RuntimeHelpers.RunClassConstructor,但这种方式似乎在 MSDN 中几乎没有记录,我不确定它是黑客还是合理的产品系统之类的方式。

0 投票
8 回答
204152 浏览

c# - 静态构造函数有什么用?

请向我解释静态构造函数的使用。我们为什么以及何时创建一个静态构造函数,是否可以重载一个?

0 投票
6 回答
13151 浏览

c# - 确保调用基类的静态构造函数的最佳方法是什么?

C# 中关于静态构造函数的文档说:

静态构造函数用于初始化任何静态数据,或执行只需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前自动调用它。

最后一部分(关于它何时被自动调用)让我陷入了循环;在阅读那部分之前,我认为通过简单地以任何方式访问一个类,我可以确定它的基类的静态构造函数已被调用。测试和检查文档表明情况并非如此;似乎在专门访问该基类的成员之前,不能保证基类的静态构造函数运行。

现在,我想在大多数情况下,当您处理派生类时,您会构造一个实例,这将构成正在创建的基类的实例,因此将调用静态构造函数。但是如果我只处理派生类的静态成员,那又如何呢?

为了更具体一点,我认为下面的代码可以工作:

我假设访问Type<T>该类会自动调用静态构造函数TypeBase;但情况似乎并非如此。Type<int>.Namenull,上面的代码输出空字符串。

除了创建一些虚拟成员(如Initialize()什么都不做的静态方法)之外,还有更好的方法来确保在使用任何派生类型之前调用基类型的静态构造函数吗?

如果不是,那么......它是虚拟成员!

0 投票
5 回答
6359 浏览

c# - 跟踪静态构造函数执行

我在这里遇到了一个问题,我的一个类的静态构造函数在它应该被调用之前被调用。(即,DI/IoC 未设置,它正在从服务定位器返回空值/异常)。

不幸的是,我对静态构造函数没有太多控制权,不要问我为什么要设置 DI/IoC,但确实如此。

在我的应用程序中,在我的 IoC 准备就绪之前,不应引用此类静态或其他方式,但静态构造函数无论如何都会执行。

有没有一种简单的方法来确定是哪一行导致构造函数执行?注意:我不能在 中设置断点,static constructor因为这一切都发生在 ASP.NET 的远程调试器可以附加到 Web 服务器之前(在 Global.asax.cs 中)