从2个不同的应用程序访问类库的公共变量

时间:2018-07-06 10:32:04

标签: c# public class-library

我有一个用c#开发的类库,它具有如下所示的类似内容。它具有一个类ClassLib。它具有一个公共变量somevariable和2个方法。一种方法将值分配给该变量,另一种方法使用该变量。

class ClassLib
{
    public string somevariable;
    public void SomeMethod1()
    {
        somevariable = "someData";
    }
    public void SomeMethod2()
    {
        string finalValue = somevariable;
    }
}

现在我有2个不同的Windows服务,其中引用了该类库。

Windows服务1 中,它具有一些类似的代码。

public class Application1
{
    public void AppMethod1()
    {
        ClassLib c1 = new ClassLib();
        c1.somevariable = "Application 1 Data";
        c1.SomeMethod2();
    }
}

此类正在将值分配给公共变量,并调用第二种方法来使用它。

Windows服务2:

public class Application2
{
    public void AppMethod2()
    {
        ClassLib c1 = new ClassLib();
        c1.SomeMethod1();
        c1.SomeMethod2();
    }
}

这将同时调用这两种方法。
这两个Windows服务连续运行。因此,我的问题是,如果两个服务同时运行并引用类库中的同一类,将影响somevariable的值。由于一个应用程序正在分配值,而另一个正在尝试使用SomeMethod1中的现有值。
换句话说,在WindowsService2中,当调用c1.SomeMethod2()时,在任何时间点somevariable的值是否都是"Application 1 Data"?这些值会重叠吗?

1 个答案:

答案 0 :(得分:1)

不。每个Windows服务都作为自己的进程运行,这意味着它具有自己的堆。因此,即使两个服务引用相同的DLL,也没有共享内存。

有多种方法可以创建在进程之间共享的数据,但前提是代码需要执行一些不寻常的操作。普通变量不共享。