在 .NET 中,创建新的 AppDomain 时是不是调用静态构造函数?
Posted
技术标签:
【中文标题】在 .NET 中,创建新的 AppDomain 时是不是调用静态构造函数?【英文标题】:In .NET, are static constructors called when a new AppDomain is created?在 .NET 中,创建新的 AppDomain 时是否调用静态构造函数? 【发布时间】:2010-08-13 07:03:18 【问题描述】:当我在 C# 中使用 AppDomain.CreateDomain
创建一个新的 AppDomain 时,会在新创建的 AppDomain 中加载组件时调用静态构造函数吗?
相关程序集已加载到当前域中。
【问题讨论】:
好问题。实际上,在您实例化类的对象之前不会调用静态ctor,而不是在加载程序集时。 @jdv:或者如果你访问一个静态成员...... 【参考方案1】:否 - 静态构造函数只会在第一次访问静态成员或创建实例时调用。
静态构造函数将在每个AppDomain
中调用一次,如果这是您所关心的。这不像在不同的AppDomain
中执行过一次,新的AppDomain
中的类型未初始化:)
请注意,类型 没有 静态构造函数的类型初始化器可能比那些 带有 静态构造器的类型更早或更晚执行,并且精确的实现细节changed for .NET 4。
【讨论】:
指向 .NET 4 更改的链接不好【参考方案2】:查看本站:http://codeidol.com/csharp/net-framework/Threads,-AppDomains,-and-Processes/AppDomains/
摘录如下:
除非您使用诸如线程静态字段之类的东西,否则每个 AppDomain 都包含所有静态字段的副本。所有类(或静态)构造函数都将在给定的 AppDomain 中运行一次。这意味着,如果您在不同的 AppDomain 中加载相同的程序集,每个程序集都将运行类构造函数,并且每个程序集都将包含所有静态字段的单独值。
【讨论】:
以上是关于在 .NET 中,创建新的 AppDomain 时是不是调用静态构造函数?的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET 中的其他 AppDomain 中运行应用程序
当实例缺少公共构造函数时,有啥方法可以从 .NET 中的 AppDomain 创建实例?