我有一个带有静态类的Nuget包。该软件包由.dll和我的主应用程序占用,而我的主应用程序也使用该dll。因此,我的问题是,如果主应用对静态类进行了任何状态更改,当它尝试使用该类时,它也会在dll中得到反映。
假设Nuget软件包包含:
namespace Package{
public static class SomeClass{
public static int A {get; set;}
public static void Change(int x){ A = x; }
}
}
主应用可以是:
using Package;
namespace MainApp{
public static void Main(string[] args){
SomeClass.Change(5);
DllClass c = new DllClass();
Console.WriteLine(c.DllFunc());
}
}
dll函数定义为:
using Package;
public class DllClass{
public DllClass() {}
public int DllFunc() { return SomeClass.A; }
}
答案 0 :(得分:1)
是的。对于给定的AppDomain,程序集仅加载一次,并且特定静态类的任何静态初始化都会在首次引用该组件时发生。
在示例代码中,Package.SomeClass
的静态初始化程序将在MainApp.Main()
启动时运行,然后执行SomeClass.Change()
。其他人都看到这种变化。
答案 1 :(得分:0)
是的,在您整个应用程序中,静态字段(非类)仅存在一次,除非您做一些时髦的事情(如其他AppDomain)。
您通常不共享“类”,而是共享存储在这些类的字段中的数据。
静态意味着您不需要对象即可访问类字段,而只能通过类名称访问它,这意味着它仅是内存中静态数据的一个实例。