问题标签 [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.
c# - 如何触发静态构造函数
代码:
多亏了 .NET 的泛型,我可以使用泛型基类中定义的泛型静态方法创建一堆特定的类。它可以在一定程度上模仿继承多态性。但是为了初始化不同版本的静态字段,我必须使用静态构造函数。不幸的是,我们不能直接调用它们,因此,我们必须想办法触发它的调用。上面给出的示例显示了一种方法。但我不喜欢实例化或反射方法。我们也不能对泛型参数的静态方法进行约束。所以,我想问一下,是否还有其他方法可以完成这种工作!
预先感谢!
~~~~~~~~~~~~~~~~
一些结论(可能有点早):
似乎没有解决方法来处理这种情况。我必须实例化一个子类或使用反射。考虑到 .cctors 只需要调用一次,我赞成反射方法,因为在某些情况下, new() 约束不是一种选择——就像你不应该将无参数 ctor 暴露给用户一样。
经过进一步的实验,我发现 .cctors 可能会被多次调用,但只有第一次调用会影响静态字段的设置。这很奇怪,但很奇怪!
c# - 在 C# 中,静态构造函数是为对象的每个初始化运行还是只运行一次?
在我的类中,我有一个字符串对象的静态字典,其中包含大量项目(它从文件中读取并初始化它们)我写了一个静态构造函数来这样做,它需要几秒钟,但我想这样做一次更快,因为我是在 ASP.Net 中做的,我希望我的网站没有这个开销,我该怎么办?如果这个构造函数为每个对象运行,那么我正在考虑一些方法,但我想我必须在用户运行的网站的每个页面中运行这个方法,所以我再次认为它会是一样的,对吗?您只初始化一次大量变量的解决方案是什么?谢谢
c# - 静态构造函数会降低访问静态方法的性能吗?
首次访问静态成员时会执行静态构造函数。知道了这一点,我有几个问题:
- 这是否意味着每次访问静态方法时,运行时都必须检查是否调用了静态构造函数?
- 这会影响性能吗?
- “无构造函数”静态类是否避免了这种性能损失?
[编辑]:我想澄清一下,我不关心微优化。
我问这个问题是因为这是一个设计决定。如果静态构造函数导致性能下降,那么我将在设计代码时考虑到这一点,并且会更加了解可能影响性能的决策。
这是一个例子来说明我的问题。Independent
采用该方法并将其放在单独的静态类中会有什么好处吗?这样,它就不必检查 staticTest
是否已初始化。[更新请参阅下面的答案以获得更好,更简单的示例]。
静态构造函数的执行由在应用程序域中发生的以下第一个事件触发:
- 类的一个实例被创建。
- 类的任何静态成员都被引用。
java - 一类静态方法中的构造函数
我有一类静态方法,可以在类中保存的地图上执行,我希望在调用类时设置地图。我试过使用私人承包商,但没有被调用。我的代码的相关部分是:
在这里使用私有构造函数是否正确,如果是,我做错了什么?
抱歉,如果这是重复的;我已经尝试搜索答案,但我不确定要搜索什么!
java - 将参数传递给Java中的静态构造函数?
我正在尝试使用参数初始化一个静态类,然后在该类中运行更多静态代码。
我知道这个static
块,但它似乎不能接受任何论点。
有没有办法将参数传递给静态构造函数?
如果不是,使用参数初始化静态类的推荐技术是什么?
编辑: 我理解的静态类是一个无法实例化的类(在 c# 中,它们被称为静态类,如果 Java 对它们有不同的术语,很抱歉没有意识到它) - 它是通过它的类名访问的,而不是而不是对象名称。
我想要实现的(非常简化)是一个类,它接收字典作为字符串,解析它,并让方法像GetRandomEntry
.
这是我的代码的详细片段:
获取代码片段的相关部分绝非易事,希望我做出了明智的选择(:
另一个可能相关的细节 - 我通常是 ac# 程序员。最近刚开始学习 Java。
谢谢。
c# - 为什么在继承类中输入静态 .ctors 的顺序与实例 .ctors 不同?
为什么var b = new B()
首先进入static B()
.ctor 和 than而不是像实例构造函数那样(和 than )反之?static A()
.ctor
public A()
public B()
c# - VS2010 没有中断对静态构造函数异常的调试
我有一个带有单个Editor
类(继承自Form
)的 Windows 窗体应用程序。
除了设计器生成的代码之外,这是表单的唯一代码(仅包含一个组合框 ( cmbConnections
)。
该类ConnectionManager
是具有静态构造函数的静态类。它的构造函数进行一些初始化,然后测试一些临界条件。如果满足条件,构造函数会抛出异常。但是,此异常不会在 Visual Studio 2010 中的调试模式下中断。为了对此进行测试,我只throw new Exception()
放入了ConnectionManager
的静态构造函数。在事件处理程序ConnectionManager
中使用并因此初始化(第一次) 。Editor_Load
调用静态构造函数并抛出异常(仅在输出窗口中可见)。正如预期的那样,Editor_Load
事件处理程序 ( )的其余部分没有被执行。cmbConnections.Visible = false;
但是我不明白的是为什么我的VS2010会吞下异常?它没有破坏调试。它不包含在任何 try/catch 块中。它继续在主窗口中执行程序。几乎看起来好像Editor_Load
是在另一个线程上执行的。
我可以在输出窗口中看到消息:
在 Editor.exe 中发生了“System.InvalidOperationException”类型的第一次机会异常
在 Editor.exe 中发生了“System.TypeInitializationException”类型的第一次机会异常
但执行根本没有在调试模式下中断。
以下是我认为可能会影响此行为的一些选项:
项目属性->构建->常规->优化代码未选中。
工具->选项->调试->常规->仅启用我的代码已选中。
在异常设置中,“用户未处理”的复选框已选中。
我错过了什么吗?这种行为正常吗?我认为 VS2010 会抛出任何未处理的异常。而这里这个是未处理的,仍然没有中断。
c# - C# 如何知道何时运行静态构造函数?
我不相信生成的代码会在每次访问静态成员(包括函数)时检查类是否已初始化。我相信检查每一次访问都是低效的。我查看了 ECMA 334 中的 §17.11,它说
静态构造函数的执行由在应用程序域中发生的以下第一个事件触发:
- 类的一个实例被创建。
- 类的任何静态成员都被引用。
看起来如何确定“第一次”发生的时间没有定义。我想不出任何办法,只能每次检查。怎么可能做到?
c# - 静态构造函数是如何工作的?
这是我假设的顺序
- 静态构造函数的开始
- 静态构造函数结束
- 主线开始
- MyMethod 的开始
- 主线结束
现在在任何情况下,如果 4 将在 2 之前开始,我就完蛋了。是否可以?
wcf - 在每次调用中调用 WCF 服务类静态构造函数
我有一个实现合同的服务类,如下所示:
我正在确定的是,每次调用 Foo API 时,都会调用静态构造函数。所以,日志看起来像这样 -
称为 Foo 的静态构造函数称为 称为
Foo 的
静态构造
函数
这不应该发生,因为这是一个静态构造函数。知道可能出了什么问题吗?
谢谢你的帮助