从主应用程序和dll中的NuGet包引用时,是否共享静态类?

时间:2019-07-05 16:48:11

标签: c# .net-core nuget

我有一个带有静态类的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; }
}

2 个答案:

答案 0 :(得分:1)

是的。对于给定的AppDomain,程序集仅加载一次,并且特定静态类的任何静态初始化都会在首次​​引用该组件时发生。

在示例代码中,Package.SomeClass的静态初始化程序将在MainApp.Main()启动时运行,然后执行SomeClass.Change()。其他人都看到这种变化。

答案 1 :(得分:0)

是的,在您整个应用程序中,静态字段(非类)仅存在一次,除非您做一些时髦的事情(如其他AppDomain)。

您通常不共享“类”,而是共享存储在这些类的字段中的数据。

静态意味着您不需要对象即可访问类字段,而只能通过类名称访问它,这意味着它仅是内存中静态数据的一个实例。