当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何防止.NET运行时中的静态变量共享?》经验,为你挑选了2个好方法。

我正在开发一个使用类似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



1> Roger Lipsco..:

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


不,因为您可以封送不同应用程序域之间的接口,并且仅将通信限制为接口提供的内容.

2> Tobi..:

静态变量是per-AppDomain,所以你可以考虑使用不同的AppDomain,但我完全不知道可能有什么其他后果.

否则,您可以使用反射预先检查类,并拒绝任何具有静态成员的类.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有