代码之家  ›  专栏  ›  技术社区  ›  Corbin March

如何防止.NET运行时中的静态变量共享?

  •  1
  • Corbin March  · 技术社区  · 16 年前

    我正在开发一款使用 Robocode-like 编程模型:参与者继承一个基类并添加策略行为。然后游戏加载参与者类的实例,比赛开始。不幸的是,参与者可以通过在其竞争对手类的实例之间共享静态变量来“欺骗”。

    如何防止.NET语言中类实例之间的静态变量共享?我知道这是在Java中实现的,每个实例使用单独的类加载器。.NET等价物是什么?

    事先谢谢…

    关于解决方案的注意事项:我的测试表明,单独的AppDomain只在加载扩展MarshalByRefObject的类时工作。我想这是有意义的-如果您只是加载一个可序列化类,那么该类将被复制到当前的AppDomain中,因此来自不同AppDomain的第二个对象将共享其静态变量。MarshalByRefObject确保只有代理加载到当前AppDomain中,静态数据保留在加载AppDomain中。另请参见: http://blogs.msdn.com/ericlippert/archive/2004/05/27/143203.aspx

    6 回复  |  直到 16 年前
        1
  •  8
  •   Roger Lipscombe    16 年前

        2
  •  7
  •   Tobi    16 年前

        3
  •  2
  •   ddc0660    16 年前
    if(typeof(CompetitorClass).GetFields(BindingFlags.Static))
    {
     // take necessary steps against cheater!
    }
    
        5
  •  0
  •   Pavel Savara    15 年前
        6
  •  0
  •   Wagner Silveira    15 年前