作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我通读了乔恩·斯凯特(Jon Skeet)关于beforefieldinit
的article的信息,偶然发现了一个问题。他提到,可以在调用静态字段的第一个引用之前的任何时间调用类型初始值设定项。
这是我的测试代码:
class Test1
{
public static string x1 = EchoAndReturn1("Init x1");
public static string EchoAndReturn1(string s)
{
Console.WriteLine(s);
return s;
}
}
class Programm
{
public static void Main()
{
Console.WriteLine("Starting Main");
Test1.EchoAndReturn1("Echo 1");
Console.WriteLine("After echo");
string y = Test1.x1; //marked line
}
}
Init x1
Starting Main
Echo 1
After echo
x1
,输出为:
Starting Main
Init x1
Echo 1
After echo
beforefieldinit
标记的对象的调用会影响其类型初始值设定项的调用吗?还是这属于他提到的
beforefieldinit
的奇怪效果?
So, beforefieldinit can make the invocation of the type initializer even lazier or more eager.
最佳答案
我不确定在这里问什么问题。也许如果我解释一下抖动的原因,那将回答这个问题。
具有显式静态构造函数的静态类对cctor的运行时间具有“严格”的语义:cctor在首次使用该类型的成员之前立即运行。所以如果你有
if (whatever) x = Foo.Bar;
Foo
为false,则
whatever
的cctor不会运行,因为我们尚未实际使用过成员。
ref
和
out
传递静态字段,但是您不能使用属性来实现。该字段可能是
volatile
,并且不能是属性。等等。
if
下。)在第一次访问之前的任何时候都允许抖动运行cctor,所以它做的是在
Main
抖动时记下
的字样。 ,请检查是否已运行Test1 cctor,如果尚未运行,请运行。
关于C#BeforeFieldInit乔恩·斯凯特(Jon Skeet)解释困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416168/
Kate具有非常方便的快捷键(Ctrl + D),可将单行和多行注释应用于选定的文本区域。如何配置Kate在C / C++源文件中应用doxygen样式的注释? /** * reduces the
我是一名优秀的程序员,十分优秀!