首页 > 解决方案 > 为什么可以将静态类的公共静态字段设置为等于不同静态类的公共静态字段?

问题描述

我在同一个 C# 源代码文件中有两个不同的类。顶部是一个名为:

static class Persist : object

与领域:

public static List<Weapon> AllWeapons = new List<Weapon>() {
      new Weapon("King's Spatha", 10, 20),
      new Weapon("Nofoot Claw", 7, 11)
      };

将源文件进一步放在不同的类中(不嵌套在第一类中):

public static class King

我在该课程中尝试做的事情如下:

public static Weapon UsedWeapon = Persist.AllWeapons[0];

我遇到的问题不在于找出是否King.UsedWeapon.ID = "King's Spatha". 事实上,这段代码确实按预期工作。

问题是我不完全了解幕后发生的事情。类Persist在类之前存在King吗?在源代码中哪个类放在另一个之上有关系吗?

标签: c#

解决方案


定义的顺序没有任何影响。当首先访问类时,静态类和字段被“初始化”。

关于循环依赖的问题:如果依赖是循环的,就会开始初始化一个静态字段,但是如果依赖循环回到那个字段,在初始化完成之前,这个字段会被未初始化的使用!

例子:

public class X
{
    public X y = Y.x;
}

public static class Y
{
    public static X x = new X();
}

void Test()
{
    X x = new X();
}
  1. 对象 x 已创建。
  2. xy 尝试用 Yx 初始化
  3. Yx 用 X 的新实例初始化
  4. 创建 X 的第二个实例
  5. 尝试用 Yx 初始化 Yxy
  6. Yx 的初始化已经开始,但是 Yx 仍然为空,所以...
  7. Yxy 初始化为 null。
  8. Yx 已准备好 X 的(不完整)实例
  9. xy 从 Yx 获取 X 的(不完整)实例
  10. x 的实例化完成(xy == null)

推荐阅读