contextstatiattribute到底是什么
本文关键字:是什么 contextstatiattribute | 更新日期: 2023-09-27 18:08:32
来自文档:
标记为ContextStaticAttribute的静态字段不被共享上下文之间。如果指定的静态字段被访问不同的上下文,它将包含不同的值。使用这个属性,不要从它派生。
下面的例子显示了这个属性的语法:
[ContextStatic] static int f=7;
不幸的是,它没有澄清在这种情况下"上下文"是什么意思。有人能举个例子说明什么时候使用这个属性吗?
该属性在使用远程处理的情况下很重要,例如从MarshalByRefObject派生的类。然后,您的代码将与客户机程序中的代理一起工作,这是一个看起来与原始类完全相同的假类对象,但其方法由CLR实现,并将方法参数序列化到服务器上运行的实际对象。通常在另一台机器上。
字段在这样的类中是一个问题,它们不能用替代方法伪造。这是抖动处理的问题。当它检测到对MRBO对象中的字段的访问时,它不生成直接读取/写入字段的代码,而是调用CLR中的helper方法。它知道对象是代理对象还是真实对象,并直接返回字段值或进行远程调用。
这当然增加了开销,这是一个可以频繁访问的静态字段的问题。[ContextStatic]属性表示您不关心是否拥有实际的静态字段值,它的本地副本就足够了。如果出于某种原因,在本地跟踪状态很重要,也可以有意地使用它。我想不出一个很好的例子。框架程序员也没有,它没有在框架代码中的任何地方使用。
正如在注释中指出的那样,参见部分中的文档确实指向了Remoting上下文的文档,这使得以哪种方式挖掘更加清晰。
关于这个话题我自己能找到的最好的资源是http://blogs.msdn.com/b/tilovell/archive/2011/02/07/contextboundobject-part-1-making-contexts.aspx
总之,在99%的情况下,这个属性不是它第一眼看起来的样子。