C# 静态类构造函数的作用域和静态类字段

C# 静态类构造函数的作用域和静态类字段,c#,scope,static-classes,C#,Scope,Static Classes,我在一个解决方案中有两个控制台应用程序(Console1和Console2)。两个应用程序都引用类库(CL)。CL包含一个静态类(SC),其中包含每个构造函数设置的字段 我的问题是,如果我在Console1中调用静态类,并且SC的构造函数首先调用任何包含静态方法的Console1,并且在SC中设置了字段。现在,如果我同时运行Console2(尽管是独立运行),并且也访问SC,静态类SC的确切范围是什么?在Console1中调用其构造函数等任何更改是否会对SC在Console2中使用时的行为产生任

我在一个解决方案中有两个控制台应用程序(Console1和Console2)。两个应用程序都引用类库(CL)。CL包含一个静态类(SC),其中包含每个构造函数设置的字段


我的问题是,如果我在Console1中调用静态类,并且SC的构造函数首先调用任何包含静态方法的Console1,并且在SC中设置了字段。现在,如果我同时运行Console2(尽管是独立运行),并且也访问SC,静态类SC的确切范围是什么?在Console1中调用其构造函数等任何更改是否会对SC在Console2中使用时的行为产生任何影响

范围是AppDomain


因为您有两个单独的进程,所以您有两个单独的AppDomain和两个单独的静态类“实例”。没有状态共享-完全没有。

范围是AppDomain


因为您有两个单独的进程,所以您有两个单独的AppDomain和两个单独的静态类“实例”。没有状态共享-完全没有。

如果Console1和Console2像两个完全独立的exe文件一样独立运行,则会再次调用SC构造函数,否则不会。如果Console1和Console2像两个完全独立的exe文件一样独立运行,则会再次调用SC构造函数,否则不会。控制台1和控制台2作为单独的进程运行。程序集是按进程加载的(确切地说,是按应用程序域加载的),每个程序集都将初始化静态构造函数等。因此,“程序集的运行实例”是完全独立的。

控制台1和控制台2作为单独的进程运行。程序集是按进程加载的(确切地说,是按应用程序域加载的),每个程序集都将初始化静态构造函数等。因此,“程序集的运行实例”是完全独立的。

您的问题可能是关于静态类的,但您得到的答案可以归结为: 如果运行一个项目的两个独立实例,则一个实例中使用的类将不会与另一个实例交互。事实上,您可以运行同一项目的两个实例,并且不会有任何问题。
运行两个Microsoft word实例没有什么不同,您的问题可能是关于静态类的,但您得到的答案可以归结为: 如果运行一个项目的两个独立实例,则一个实例中使用的类将不会与另一个实例交互。事实上,您可以运行同一项目的两个实例,并且不会有任何问题。
这与运行两个Microsoft word实例没有什么不同。否,第二个控制台应用程序将使用该静态类的另一个实例。没有危险,第二个控制台应用程序将使用该静态类的另一个实例。没有危险,回答了我所有的问题。顺便问一下,我以后在哪里可以查到,我在谷歌搜索“静态类MSDN”时没有找到任何关于范围的引用,至少我在下面的页面上没有看到任何内容:@Freddy:首先,它记录在你链接的页面上:静态构造函数只调用一次,静态类在程序所在的应用程序域的生命周期内一直保留在内存中。“。但它并没有真正突出显示,因为这是一个基本概念,即具有相同类的两个不同进程不共享任何状态。这不限于C++,在C++、java等中也是一样的。你的问题可能是关于静态类,但是你得到的答案都归结为:如果你运行一个项目的两个单独实例,那么在一个实例中使用的类将不会与另一个实例交互。事实上,你可以运行同一个项目的两个实例,你不会有任何问题。@DanielHilgarth,你是对的,我错了,错过了。Kazuo,我在你自己的答案中进行了评论。我将你的答案标记为答案,因为你是第一个提到AppDomain的人,并且答案都非常相似(可能是因为我的一个小问题;-)太好了,回答了我所有的问题。顺便问一下,我以后在哪里可以查到,我在谷歌搜索“静态类MSDN”时没有找到任何关于范围的引用,至少我在下面的页面上没有看到任何内容:@Freddy:首先,它记录在你链接的页面上:静态构造函数只调用一次,静态类在程序所在的应用程序域的生命周期内一直保留在内存中。“。但它并没有真正突出显示,因为这是一个基本概念,即具有相同类的两个不同进程不共享任何状态。这不限于C++,在C++、java等中也是一样的。你的问题可能是关于静态类,但是你得到的答案都归结为:如果你运行一个项目的两个单独实例,那么在一个实例中使用的类将不会与另一个实例交互。事实上,你可以运行同一个项目的两个实例,你不会有任何问题。@DanielHilgarth,你是对的,我错了,错过了。Kazuo,我在您自己的答案中进行了评论。我将您的答案标记为您的答案,因为您是第一个提到AppDomain的人,并且答案都非常相似(可能是因为我的一个小问题;-)