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

如何防止.NET语言的Class实例之间共享静态变量?我知道这是通过在Java中为每个实例使用单独的ClassLoader来完成的。什么是.NET等效项?

此外,我的测试表明,只有在加载扩展了MarshalByRefObject的Class时,单独的AppDomain才起作用。我想这很有意义-如果您仅加载Serializable类,则将该类复制到当前AppDomain中,因此来自另一个AppDomain的第二个对象将共享其静态变量。 MarshalByRefObject保证仅将代理加载到当前AppDomain中,并且静态变量保留在加载的AppDomain中。另请参阅:http://blogs.msdn.com/ericlippert/archive/2004/05/27/143203.aspx

最佳答案

将每个竞争对手加载到不同的AppDomain中。

关于c# - 如何防止.NET运行时中的静态变量共享?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/84164/

10-12 18:34