两个不同的类库共享一个静态类库

时间:2013-05-07 12:59:27

标签: c# reflection scripting

我的代码中发生了一件奇怪的事情,我编写了一些可以运行脚本(反射)的软件,每个脚本都是一个单独的类库。这些脚本都包含相同的类库以及一些方法和变量(所有静态变量和方法)。

但现在发生了一件令人讨厌的事情,看起来一个脚本正在改变另一个脚本的静态库类中的值,我不知道这是怎么回事。我能解释一下这里发生了什么吗?

3 个答案:

答案 0 :(得分:1)

  

...一个脚本正在更改另一个脚本的静态库类中的值

鉴于这是在多个库之间共享的相同静态类,那么您描述的行为是正确的。当你创建static意味着它属于类型而不是特定对象时,更改它意味着在引用/使用的同一app域中的所有它会看到这些变化。

答案 1 :(得分:0)

通过脚本我假设您的意思是代码在不同的线程中运行。

静态类不是真正的静态,它们可以被更改,同一应用程序域中的每个线程都看到静态类包含的相同数据。因此,所有其他线程将看到一个线程对静态变量的更改。显然,除非类是线程安全的,否则这种行为是危险的,因此您可能希望在静态类中实现一些锁定。

答案 2 :(得分:0)

在C#中,static并不意味着它的值无法更改,相反,静态成员在内存中只有一个实例。这意味着如果任何代码行更改了静态成员,则使用该成员的其他所有人都可以看到更改。

因此,您所面临的行为非常好。

如果您希望无法更改成员的值,请使用C#的const关键字。

查看this MSDN示例。