首页 / 知识
关于c#:如何防止.NET运行时中的静态变量共享?
2023-04-16 15:26:00

How do I prevent static variable sharing in the .NET runtime?我正在开发一个使用类似Robocode的编程模型的游戏(C#):参与者继承基类并添加策略性行为。然后,游戏会加载参与者的班级实例,比赛开始。不幸的是,参与者可以通过在竞争对手类的实例之间共享静态变量来"作弊"。 如何防止.NET语言的Class实例之间共享静态变量?我知道这是通过在Java中为每个实例使用单独的ClassLoader来完成的。什么是.NET等效项? 此外,我的测试表明,只有在加载扩展了MarshalByRefObject的Class时,单独的AppDomain才起作用。我想这是有道理的-如果仅加载可序列化的类,则将该类复制到当前的AppDomain中,因此来自另一个AppDomain的第二个对象将共享其静态变量。 MarshalByRefObject保证仅将代理加载到当前AppDomain中,并且静态变量保留在加载的AppDomain中。另请参阅:http://blogs.msdn.com/ericlippert/archive/2004/05/27/143203.aspx 将每个竞争对手加载到不同的AppDomain中。 静态变量是针对每个AppDomain的,因此您可以考虑使用不同的AppDomain,但是我完全不知道还有什么其他后果。 否则,您可以使用反射预先检查类,并拒绝任何具有静态成员的类。
[ThreadStatic]属性对您有用吗? 只要您的玩家处于不同的线程中,它就可以解决问题。 从MSDN站点:
那是我正在开发的真正Robocode的.NET插件中的解决方案。 我没有具体的答案,但我将看看.NET Terrarium项目。 所有参与者都是用户加载的DLL。 他们做了很多巧妙的工作,以防止不安全和欺诈代码被加载/执行。 贾斯汀·罗杰斯(Justin Rogers)撰写了大量有关Terrarium实现细节的文章。 |
最新内容
相关内容
linux运行图形界命令?
linux运行图形界命令?,系统,密码,地址,电脑,图形界面,地方,工具,界面,终端,图形,linux图形化界面命令第一种方式比较简单,只需要选择相应的带图linux怎样运行命令?
linux怎样运行命令?,系统,工作,信息,基础,地址,命令,目录,工具,密码,一致,Linux系统基础操作指令1、linux常用命令有pwd命令、cd命令、ls命令linux编译完运行命令?
linux编译完运行命令?,系统,代码,环境,工具,信息,命令,文件,程序,终端,编辑,在linux中编译C输入完程序后输入个:wq然后按什么键就然后就回到了linux命令程序运行?
linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Linux中如何启动进程?进程调度命令有哪些?实现调度启动进程的方法有linux运行脚本命令?
linux运行脚本命令?,系统,代码,服务,文件,工具,平台,网站,脚本,命令,方法,Linux配置开机自启动执行脚本有哪些方法方法1:执行ntsysv命令,然后在linux命令后加运行?
linux命令后加运行?,状态,暂停,工具,单位,进程,环境,网络,系统,权威,第一,mv什么意思呢?1、MV就是音乐短片(Music Video),是指与音乐(通常大部分是ssh运行linux命令?
ssh运行linux命令?,地址,服务,系统,软件,工具,电脑,网络,密码,名称,命令,在linux命令中登陆ssh服务的命令是?步骤如下:查询\安装SSH服务 (1)登陆linux运行多个命令?
linux运行多个命令?,环境,软件,系统,工作,服务,连续,命令,指令,分号,冲突,linux多个用户同时执行命令会冲突吗不会冲突。解释:用户登录linux的linux运行命令查看?
linux运行命令查看?,系统,信息,状态,命令,名称,情况,地址,软件,进程,第一,linux查看进程命令首先打开xshell软件,连接上linux服务器,使用指令pslinux中命令运行软件?
linux中命令运行软件?,软件,系统,名称,工具,电脑,位置,环境,中心,在线,初级,如何用命令行在Linux下安装软件?首先启动CentOS7,在VMware中点击上脚本linux上运行命令?
脚本linux上运行命令?,工具,代码,时间,密码,系统,环境,名字,位置,第三,下来,typescript脚本中怎样运行Linux命令?1、Script可用于记录当前用户linux运行命令的脚本?
linux运行命令的脚本?,系统,服务,工具,脚本,意外,技术,分析,文件,方法,命令,sh文件在linux下如何运行Linux下面运行 SH文件步骤如下:查看目录sh