为什么可以将静态类的公共静态字段设置为等于其他静态类的公共静态字段?

时间:2020-03-24 16:32:47

标签: c#

我在同一个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?在源代码中哪个类放在另一个之上有关系吗?

1 个答案:

答案 0 :(得分:0)

定义顺序没有任何影响。 静态类和字段在首次访问该类时被“初始化”。

关于循环依赖的问题: 如果依赖项是循环的,则将开始对静态字段进行初始化,但是如果依赖项以循环方式返回到该字段,则在初始化完成之前,该字段将未经初始化就使用!

示例:

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. x.y试图用Y.x初始化
  3. Y.x使用X的新实例进行初始化
  4. X的第二个实例已创建
  5. Y.x.y试图用Y.x初始化
  6. Y.x的初始化已经开始,但是Y.x仍然为空,所以...
  7. Y.x.y初始化为空。
  8. Y.x已准备好使用X的(不完整)实例
  9. x.y从Y.x获取X的(不完整)实例
  10. 完成x的实例化(x.y == null)