来自documentation :
A static field marked with ContextStaticAttribute is not shared between contexts. If the indicated static field is accessed on a different context, it will contain a different value. Use this attribute as it is, and do not derive from it.
The following example shows the syntax of this attribute:
[ContextStatic] static int f=7;
不幸的是,它没有阐明在这种情况下“上下文”的含义。有人可以举例说明何时使用此属性吗?
最佳答案
属性在您使用远程处理的情况下很重要,例如从 MarshalByRefObject 派生的类。然后,您的代码将与客户端程序中的代理一起工作,这是一个伪造的类对象,它看起来与原始类完全一样,但其方法由 CLR 实现,并将方法参数序列化到在服务器上运行的实际对象。通常在另一台机器上。
字段在这样的类中是一个问题,它们不能用替代方法来伪造。这是抖动处理的事情。当它检测到对 MRBO 对象中某个字段的访问时,它不会生成直接读取/写入该字段的代码,而是调用 CLR 中的辅助方法。它知道对象是代理对象还是真实对象,并直接返回字段值或进行远程调用。
这当然会增加开销,这是一个可以非常频繁访问的静态字段的问题。 [ContextStatic] 属性表示您不关心实际的静态字段值,它的本地副本就足够了。或者,如果出于某种原因在本地跟踪状态很重要,则可以有意使用它。我想不出一个很好的例子。框架程序员也没有,它没有在框架代码中的任何地方使用。
关于c# - ContextStaticAttribute 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927864/