首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显式调用静态构造函数

显式调用静态构造函数
EN

Stack Overflow用户
提问于 2012-07-17 18:42:06
回答 4查看 21.6K关注 0票数 38

我想为下面的类写单元测试。

如果名称不是"MyEntity“,则mgr应为空。

负单元测试

使用Manager私有访问器,我想将名称更改为"Test“,以便mgr应该为空。然后将验证MGR值。为了实现这一点,我想显式调用静态构造函数,但在使用

代码语言:javascript
复制
Manager_Accessor.name = "Test"
typeof(Manager).TypeInitializer.Invoke(null, null); 

name始终设置为"MyEntity“如何将name设置为"Test”并调用静态构造函数。

代码语言:javascript
复制
public class Manager
{        
        private static string name= "MyEntity";

        private static object mgr;

        static Manager()
        {
            try
            {
                mgr = CreateMgr(name);
            }
            catch (Exception ex)
            {
                mgr=null;
            }
        }
}
EN

回答 4

Stack Overflow用户

发布于 2015-04-08 17:51:12

正如我今天发现的,静态构造函数可以直接调用:

来自another Stackoverflow post

其他的答案都很好,但是如果你需要强制运行一个类构造函数而不引用该类型(即.反射),您可以使用:

类型Type = ...;System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);

我必须将此代码添加到我的应用程序to work around a possible bug in the .net 4.0 CLR中。

票数 49
EN

Stack Overflow用户

发布于 2017-06-15 08:18:26

对于任何找到这个帖子的人来说...我刚做了测试。看起来System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor()只有在由于其他原因已经运行了而不是的情况下才会运行静态构造函数。

例如,如果您的代码不确定以前的代码是否已经访问了类并触发了静态构造函数来运行,那么这并不重要。之前的访问将触发静态构造函数运行,但随后RunClassConstructor()将不再运行它。RunClassConstructor()只在静态构造函数尚未运行时才运行它。

在RunClassConstructor()之后访问类也不会导致静态构造函数第二次运行。

这是基于在Win10 UWP应用程序中的测试。

票数 8
EN

Stack Overflow用户

发布于 2016-09-15 03:55:29

如果你的类中有一个静态成员(必须有,否则静态构造函数不会做太多),那么就不需要显式地调用静态构造函数。

只需访问您想要调用其静态构造函数的类。例如:

代码语言:javascript
复制
public void MainMethod()
{
    // Here you would like to call the static constructor

    // The first access to the class forces the static constructor to be called.
    object temp1 = MyStaticClass.AnyField;

    // or
    object temp2 = MyClass.AnyStaticField;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11520829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档