从文档:
在Contextxts之间不共享用ContextStaticAttribute标记的静态字段.如果在不同的上下文中访问指示的静态字段,则它将包含不同的值.按原样使用此属性,不要从中派生.
以下示例显示了此属性的语法:
Run Code Online (Sandbox Code Playgroud)[ContextStatic] static int f=7;
不幸的是,它没有说明在这种情况下"背景"的含义.有人可以举例说明何时使用这个属性?
该属性在使用远程处理的情况下很重要,例如从MarshalByRefObject派生的类。然后,您的代码将与客户端程序中的代理一起工作,该代理程序是一个伪类对象,该类对象看起来与原始类完全相同,但其方法由CLR实现,并将方法参数序列化为服务器上运行的实际对象。通常在另一台机器上。
字段是此类中的一个问题,不能用替代方法来伪造它们。这是处理抖动的方法。当它检测到对MRBO对象中的字段的访问时,它不会生成直接读取/写入该字段的代码,而是在CLR中调用一个辅助方法。哪个知道对象是代理对象还是真实对象,并直接返回字段值或进行远程调用。
当然,这增加了开销,这是一个静态字段的问题,可以很频繁地访问它。[ContextStatic]属性表示您不必关心实际的静态字段值,它的本地副本就足够了。或者,如果出于某种原因在本地跟踪状态很重要,则可以有意使用它。我想不出一个很好的例子。框架程序员也没有,它不在框架代码内的任何地方使用。
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |