![]() |
1
6
它是允许的,因为不允许它将是一个错误 许多
你当然是在用一把上了膛的枪指着你的脚。
类型可以用beforefieldinit属性(§10.1.6)标记,以表明不一定需要§10.5.3.1中规定的担保。特别是,不需要提供上面的最终要求:在调用或引用静态方法之前,不需要执行类型初始值设定项。
静态字段。由CIL生成器(因此,也可能由程序员)来决定是否需要这种保证,因此在需要时以一致性保证为代价提供了效率。
前字段初始化 类的属性:
|
![]() |
2
6
稍有不同的问题。 当然很容易在你的样品中发现,但是这个样品呢?
你可以欺骗编译器来实现这一点的方法实际上是无穷无尽的。即使编译器得到了所有的答案,你仍然可以通过反射来击败它。
|
![]() |
3
0
静态构造函数只能初始化静态类成员,这与类实例和常规非静态类成员无关。 |
![]() |
4
0
您可能没有意识到的是,对于每个没有非静态构造函数的类,编译器都会生成一个。这与静态构造函数不同,当您将其分解为MSIL时,它只不过是一个告诉CLR“嘿,在运行main()中的内容之前运行此代码”的标志。因此,首先执行静态构造函数的代码。它使用在幕后生成的非静态构造函数实例化一个本地作用域的程序对象,一旦实例化,就会对该对象调用Run()。然后,因为您没有将这个新对象存储在任何地方,所以当构造函数完成执行时,它将被释放。然后main()函数运行(不执行任何操作)。 尝试此扩展:
看看输出是什么。我猜会是这样的:
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |