C# 在不同DLL之间但在同一进程中共享变量/EXE

C# 在不同DLL之间但在同一进程中共享变量/EXE,c#,dll,process,C#,Dll,Process,我在DLLA中声明了一个静态变量,我想从另一个DLLB访问它 如何在同一进程中运行的两个DLL之间共享变量 问题是:在以下代码中,无法检索localB变量。如何读取Main方法中的变量B DLLA namespace A { public class ProgramA { public static string variableA = "John"; public static void Main(string[] args) { b.Program.variableB = va

我在DLLA中声明了一个静态变量,我想从另一个DLLB访问它

如何在同一进程中运行的两个DLL之间共享变量

问题是:在以下代码中,无法检索localB变量。如何读取Main方法中的变量B

  • DLLA

    namespace A
    {
    public class ProgramA
    {
    
    public static string variableA = "John";
    public static void Main(string[] args)
    {
    
        b.Program.variableB = variableA;
    }
    
  • DLLB

    namespace b
     {
     public class Program
      {
        public static string variableB;
        public static void Main(string[] args)
       {
           string localB = variableB;
       }
    

如果DLL2引用了DLL1,您只需在第一个DLL(first.DLL)中将该变量(以及包含该变量的类)标记为
public

在第二个DLL(second.DLL)中,引用First.DLL,然后用作:

using MyGlobalVar
....

MyAppVars.UserName = "John";

为什么不用初始化第一个DLL就可以读取变量?因为类被声明为静态的。因此,每个公共变量也是静态的,并且在第一次使用该类时由运行时自动创建/初始化。不需要用new声明此类的实例。(编译器不允许您创建实例)。关于静态类的更多信息,当类不是静态的时候?如何从另一个类读取变量?我编辑了我的初始问题。在您修改的示例中,无法从Main方法外部访问localB变量。它是Main方法内部的局部变量,在执行方法代码后会立即被销毁。然而,variableB被声明为静态的,这样您就可以使用所使用的语法(前提是您有正确的引用并使用适当的语法)那么,当调用Main方法时,我可以重用一个全局变量什么呢?当我这样做时,您说,在不运行DLL1的情况下读取变量。在运行DLL1之后,我必须阅读它!如果在有人读取UserName之前需要在DLL1内部运行一些东西,那么就编写一个静态构造函数(您将确保在访问该类的任何静态字段之前调用它)。此外,运行DLL1意味着什么?场景是:DLL1设置一个变量,因此首先我必须运行DLL1。然后运行DLL2,DLL1中设置的变量必须由DLL2读取。请,我改进了我的问题。谢谢。在更新的示例中,A依赖于B!此外,请注意,您必须自己调用Main方法,它不是入口点。如果
using MyGlobalVar
....

MyAppVars.UserName = "John";