2013-04-10 225 views
11

documentationContextStaticAttribute究竟是什么?

静态字段标明ContextStaticAttribute没有上下文之间共享 。如果指定的静态字段在不同的上下文中访问,则它将包含不同的值。原样使用此 属性,并且不从其派生。

以下示例显示该属性的语法:

[ContextStatic] 
static int f=7; 

遗憾的是它并没有明确什么是在这种情况下“背景”的意思。有人可以举例说明何时使用这个属性?

+2

我觉得它使用.NET Remoting和它的上下文类 – Jehof 2013-04-10 14:00:43

+0

请参阅[这个答案](http://forums.asp.net/post/2428493.aspx)。 – Magnus 2013-04-10 14:09:20

+0

该文档具有['Context']的链接(http://msdn.microsoft.com/zh-cn/library/system.runtime.remoting.contexts.context.aspx):“一旦将对象放入一个上下文,它一直存在于它中,可以绑定到上下文的类被称为上下文绑定类,当从另一个上下文访问时,这些类通过使用代理直接引用。 – 2013-04-10 14:37:16

回答

4

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

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

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