Tag: static constructor

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

考虑: class Foo { static Foo() { // Static initialisation } } 为什么static Foo() {…}需要static Foo() {…} ? 静态构造函数必须始终是无参数的,为什么要这么麻烦? 它们是否有必要避免一些解析器模糊,或者只是为了保持与常规无参数构造函数的一致性? 由于它看起来非常像初始化块,我经常发现自己意外地将它们排除在外,然后不得不考虑几秒钟的错误。 如果他们可以以同样的方式被淘汰将是很好的。

CLR如何处理静态类?

任何人都可以解释CLR如何处理静态类? CLR是否为内部处理静态类创建了一个单例实例? 如果没有,为什么我们在C#中有一个静态构造函数? (根据我的理解,我们仅使用构造函数来实例化类)

c#静态构造函数未从派生类调用

class Bus { static Bus() { foreach(FieldInfo fi in typeof(T).GetFields()) { if(fi.FieldType == typeof(Argument)) { fi.SetValue(typeof(T), new Argument(“busyname”, “busyvalue”)); } } } } class Buss : Bus { public static Argument field; } 任何想法如何使这个工作,以便在Buss中引用静态字段的引用触发总线中的静态构造函数?

RunClassConstructor是否只能运行一次类型的静态构造函数?

我正在使用以下代码调用类的静态ctor: Type type; System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle); 这会导致cctor运行两次吗?

使用静态构造函数(Jon Skeet Brainteaser)

作为一个相对新手,我尽可能多地阅读关于特定主题的内容,并尽可能多地测试/编写代码。 我正在看Jons Brainteasers之一 (问题#2),我的输出与答案不同。 这使我在这里询问最近版本中是否有什么变化,并看看其他人从这段代码中获得了什么输出。 问题是,“将展示什么,为什么,你有多自信?” using System; class Foo { static Foo() { Console.WriteLine (“Foo”); } } class Bar { static int i = Init(); static int Init() { Console.WriteLine(“Bar”); return 0; } } class Test { static void Main() { Foo f = new Foo(); Bar b = new Bar(); } } 什么,如果有的话,会让我们得到两个不同的答案?

强制类加载

在C#或.net IL中是否有一种方法可以强制一个具有类型初始化器(静态构造函数)的类来加载自身,而无需访问它的任何参数? 假设我上了课 public static class LogInitialization { static LogInitialization() { System.Console.WriteLine(“Initialized”); } } 有没有办法让这条线印刷? 请注意,该类是静态的,因此我无法将其实例化以强制初始化,并且它没有公共成员,因此我无法访问它们以启动它。

显式调用静态构造函数

我想为下面的课程编写unit testing。 如果名称不是“MyEntity”,则mgr应为空白。 负unit testing 使用Manager私有访问器我想将名称更改为“Test”,以便mgr应为null。 然后将validationmgr值。 为了实现这一点,我想显式调用静态构造函数,但是当我使用静态构造函数调用时 Manager_Accessor.name = “Test” typeof(Manager).TypeInitializer.Invoke(null, null); name始终设置为“MyEntity”如何将名称设置为“Test”并调用静态构造函数。 public class Manager { private static string name= “MyEntity”; private static object mgr; static Manager() { try { mgr = CreateMgr(name); } catch (Exception ex) { mgr=null; } } }

在C#中,静态构造函数是为每个对象初始化运行的,还是只运行一次?

在我的类我有一个字符串对象的静态字典,其中包含大量的项目(它从一个文件中读取并初始化它们)我写了一个静态构造函数,这需要几秒钟,但我想做一次为了更快,因为我在ASP.Net中这样做,我希望我的网站不要有这个开销,我该怎么办? 如果这个构造函数为每个对象运行,那么我正在考虑一些方法,但我想我必须在用户运行的网站的每个页面中运行此方法,所以我想再次它会是相同的,我是对的吗? 什么是初始化一大组变量的解决方案? 谢谢

单例实现与静态构造函数的懒惰

Jon Skeet 在他的单例实现中建议,如果你需要单独的最大懒惰,你应该添加一个静态构造函数,这将使编译器将类型标记为beforefieldinit。 但是,我做了一些测试,如果没有 beforefieldinit,它似乎更懒。 代码示例(私有构造函数调用输出到控制台并validation字段是否已初始化: public sealed class Singleton { private static readonly Singleton instance = new Singleton(); public static string Stub() { return “123”; } // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit //static Singleton() //{ //} private Singleton() { Console.WriteLine(“private ctor”); } public static Singleton […]

静态构造函数可以在非静态构造函数之后运行。 这是编译器错误吗?

以下程序的输出是: Non-Static Static Non-Static 这是编译器错误吗? 我期望: Static Non-Static Non-Static 因为我认为在非静态构造函数之前总是调用静态构造函数。 我使用.net 3.5和.net 4.0在Visual Studio 2010中对此进行了测试。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StaticConstructorBug { class Program { static void Main(string[] args) { var mc = new MyClass(); Console.ReadKey(); } } public class MyClass { public MyClass() { Console.WriteLine(“Non-static”); } static MyClass() { Console.WriteLine(“Static”); […]