ContextStaticAttribute究竟是什么?

时间:2013-04-10 13:54:35

标签: c# .net

来自documentation

  

不会共享标有 ContextStaticAttribute 的静态字段   在上下文之间。如果在a上访问指示的静态字段   不同的上下文,它将包含不同的值。用这个   属性原样,并且不是从它派生的。

     

以下示例显示了此属性的语法:

[ContextStatic]
static int f=7;

不幸的是,在这种情况下,它没有说明“上下文”的含义。有人可以举例说明何时使用这个属性?

2 个答案:

答案 0 :(得分:5)

在使用远程处理的情况下,属性很重要,就像从MarshalByRefObject派生的类一样。然后,您的代码在客户端程序中使用代理,这是一个伪类对象,看起来与原始类完全相同,但其方法由CLR实现,并将方法参数序列化为服务器上运行的实际对象。通常在另一台机器上。

字段是这样一个类中的问题,它们不能用替代方法伪造。这是抖动所处理的问题。当它检测到对MRBO对象中的字段的访问时,它不会生成直接读/写字段的代码,而是在CLR中调用辅助方法。哪个知道对象是代理还是真实对象,而是直接返回字段值或者进行远程调用。

这增加了开销,当然,静态字段的问题可以非常频繁地访问。 [ContextStatic]属性表示你不关心实际的静态字段值,它的本地副本就足够了。或者,如果由于某种原因在本地跟踪状态很重要,它可以有意使用。我想不出一个很好的例子。框架程序员也没有,它不会在框架代码中的任何地方使用。

答案 1 :(得分:0)

正如评论中所指出的,中的文档也参见部分确实指向了远程处理上下文的文档,这使得它更清楚地挖掘了哪种方式

我自己能够找到的关于该主题的最佳资源是http://blogs.msdn.com/b/tilovell/archive/2011/02/07/contextboundobject-part-1-making-contexts.aspx

简而言之 - 在99%的情况下,这个属性不是第一眼看上去的。