问题标签 [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 回答
3703 浏览

c# - Assembly.GetCallingAssembly() 和静态构造函数?

好的,所以我遇到了以下问题,引起了人们的注意。

由于各种原因,我有一个测试设置,其中 TestingAssembly.dll 中的测试类依赖于 BaseTestingAssembly.dll 中的 TestingBase 类。与此同时,TestBase 所做的一件事是在它自己和调用程序集中寻找某个嵌入式资源

所以我的 BaseTestingAssembly 包含以下几行......

静态,因为我认为这些程序集在应用程序的整个生命周期中都是相同的,所以为什么要在每次测试中重新计算它们。

但是,在运行此程序时,我注意到 _assembly 和 _calling_assembly 都分别设置为 BaseTestingAssembly 而不是 BaseTestingAssembly 和 TestingAssembly。

将变量设置为非静态并在常规构造函数中对其进行初始化修复了此问题,但我很困惑为什么会发生这种情况。我认为静态构造函数在第一次引用静态成员时运行。这只能来自我的 TestingAssembly,它应该是调用者。有谁知道可能发生了什么?

0 投票
3 回答
3253 浏览

objective-c - 类加载时 Objective-C 中的静态初始化程序

我正在尝试构建一些东西来动态地从类名实例化一个对象,类似于 Java 的 Class.forName 方法的工作原理,例如

我在 Objective-C 中没有看到任何这样的行为,所以我想在加载 Objective-C 类时调用一个方法来注册 Class。基本上,我想调用一个注册我的类的方法,例如

有没有办法在 OS X 平台上的 Objective-C 中做到这一点?

谢谢。

0 投票
22 回答
176745 浏览

c++ - C ++中的静态构造函数?我需要初始化私有静态对象

我想要一个具有私有静态数据成员的类(一个包含所有字符 az 的向量)。在 java 或 C# 中,我可以只创建一个“静态构造函数”,它将在创建类的任何实例之前运行,并设置类的静态数据成员。它只运行一次(因为变量是只读的并且只需要设置一次)并且由于它是类的函数,它可以访问其私有成员。我可以在构造函数中添加代码来检查向量是否已初始化,如果未初始化则对其进行初始化,但这会引入许多必要的检查,并且似乎不是问题的最佳解决方案。

我突然想到,由于变量是只读的,它们可以是 public static const,所以我可以在类之外设置它们一次,但再一次,它看起来有点像一个丑陋的 hack。

如果我不想在实例构造函数中初始化它们,是否可以在类中拥有私有静态数据成员?

0 投票
3 回答
7008 浏览

c# - 类型初始化器(静态构造器)异常处理

我正在用 C# 编写 WCF 服务。最初,我的实现有一个静态构造函数来执行一些一次性初始化,但是正在完成的一些初始化可能(暂时)失败。

即使第一次(失败的)尝试引发了异常,静态构造函数似乎只被调用一次?任何后续实例化我的类的尝试都将立即失败,并且TypeInitializationException没有实际执行代码。

C# 语言规范规定,静态构造函数最多调用一次,但基本上这会在其中产生一个异常,即使您捕获它,您也无法从中恢复?

我在这里错过了什么吗?我想我应该将任何远程危险的东西移到服务的实例构造函数中,并手动检查类初始化是否已经成功完成?

0 投票
3 回答
7222 浏览

c# - 分配给基类的静态只读字段

编译上述 C# 代码时出现错误。

错误说-“不能分配静态只读字段(静态构造函数或变量初始化程序除外)”

但我在静态构造函数中分配它。

对这样一个静态变量的需求是,基类有使用这个变量的方法,但是派生类和基类必须有这个变量的不同值。但是该值在相应类的所有实例中是恒定的。它必须是只读的,因为它不能被任何地方更改。

上述代码中的错误是什么?(如果有的话)我似乎无法找到一个。错误消息没有帮助。因为我没有做错任何事情。

如果有错误,我该如何实现这个功能?我知道一个简单的解决方法是使其成为实例变量并在派生类中为它们分配不同的值。但这是不必要的,因为该值在相应类的所有实例中都是恒定的。

0 投票
5 回答
2972 浏览

c# - 使用静态构造函数(Jon Skeet 脑筋急转弯)

作为一个相对新手,我尝试尽可能多地阅读特定主题并尽可能多地测试/编写代码。我正在查看Jons Brainteasers之一(问题 #2),我的输出与答案不同。这让我来这里询问最近的版本是否发生了变化,并查看其他人从这段代码中得到了什么输出。

问题是,“将展示什么,为什么,以及你有多自信?”

如果有的话,什么会导致我们得到两个不同的答案?

0 投票
4 回答
1748 浏览

c# - 控制何时调用静态构造函数

在我的自定义属性的静态构造函数中,我在加载的程序集中搜索所有用我的属性修饰的类,并对它们执行一些操作。

我希望在运行时尽快调用静态构造函数,最好是在执行static void Main()入口点之前。

目前它只有在我对属性进行一些调用后才会被调用。我可以在程序的其他地方进行这样的调用,但理想情况下,属性的功能是独立的。

寻找答案,我在MSDN上读到了这个:

用户无法控制何时在程序中执行静态构造函数。

但肯定有一些棘手的、狡猾的或恶作剧的解决方法来尽快调用静态构造函数。也许可以使用属性、反射或其他某种魔法。可以做到吗?

因为人们无疑会告诉我没有充分的理由去做我所要求的,所以我提出我的目的和我的代码:我正在尝试使用属性来以声明方式配置一个db4o工厂。如果我的属性的静态构造函数在我已经建立连接之后被调用,那么它没有任何作用并且没有用。因此,必须在我的程序有机会建立这样的连接之前调用它。

更新:

我最终使用了带有静态方法的抽象属性。通过这种方式,我可以导出任意数量的属性,并且它们都将通过调用这个方法应用于指定的配置。

和呼叫站点:

0 投票
3 回答
10894 浏览

wcf - 创建单例 ChannelFactory并重用于客户端连接

在我们的 SharePoint/ASP.NET 环境中,我们有一系列数据检索器类,它们都派生自一个通用接口。我被分配了创建一个数据检索器的任务,该检索器可以使用 WCF 与其他 SharePoint 场进行远程通信。我目前实现它的方式ChannelFactory<T>是在静态构造函数中创建一个单例,然后由远程数据检索器的每个实例重用以创建一个单独的代理实例。我认为这会很好用,因为ChannelFactory只有在应用程序域中实例化一次,并且它的创建保证是线程安全的。我的代码看起来像这样:

我的问题是,这是一个好的设计吗?我认为一旦ChannelFactory创建了我就不需要担心线程安全,因为我只是用它来调用CreateChannel()但我错了吗?它是在改变状态还是在幕后做一些可能导致线程问题的时髦的事情?此外,我是否需要将一些代码放在某个地方(静态终结器?)手动处理,ChannelFactory或者我可以假设每当 IIS 重新启动时,它都会为我完成所有清理工作?

相关:ChannelFactory 重用策略

0 投票
3 回答
416 浏览

.net - 是否可以从 WCF 服务中的静态构造函数调用实例方法?

是否可以从 WCF 服务中的静态构造函数调用实例方法?是否有类似当前上下文的东西,我可以通过它获取 MyService 的当前实例?

编辑:

这个问题是 WCF 问题,而不是关于从静态方法调用实例方法的简单语言问题。以下是 Web 应用程序中类似案例的示例:

所以我希望在 WCF 中调用服务时存在一些具有当前执行的 MyService 实例的全局上下文。

0 投票
4 回答
5252 浏览

c# - Java 静态块是否等同于 C# 静态构造函数?

C# 静态构造函数和 Java 静态块之间的真正区别是什么?

它们都必须是无参数的。当第一次使用相关类时,它们都只被调用一次。

我是否遗漏了某些东西,或者它们是相同的东西,只是名称不同?