我正在开发一个使用类似Robocode编程模型的游戏(C#):参与者继承基类并添加战略行为.然后游戏加载参与者类的实例并开始竞争.不幸的是,参与者可以通过在竞争对手类的实例之间共享静态变量来"欺骗".
如何防止.NET语言中的Class实例之间的静态变量共享?我知道这是通过每个实例使用一个单独的ClassLoader在Java中完成的.什么是.NET等价物?
提前致谢...
关于解决方案的注意事项:我的测试表明,单独的AppDomains仅在加载扩展MarshalByRefObject的类时才起作用.我想这是有道理的 - 如果您只是加载Serializable类,则将Class复制到当前AppDomain中,以便来自不同AppDomain的第二个对象将共享其静态变量.MarshalByRefObject保证只有代理加载到当前的AppDomain中,并且静态加载AppDomain中的静态.另见:http://blogs.msdn.com/ericlippert/archive/2004/05/27/143203.aspx
将每个竞争对手加载到不同的AppDomain中.
静态变量是per-AppDomain,所以你可以考虑使用不同的AppDomain,但我完全不知道可能有什么其他后果.
否则,您可以使用反射预先检查类,并拒绝任何具有静态成员的类.