在 .NET 中,创建新 AppDomain 时是否会调用静态构造函数?
当我在 C# 中使用 AppDomain.CreateDomain
创建新的 AppDomain 时,当程序集加载到新创建的 AppDomain 中时,是否会调用静态构造函数?
相关程序集已加载到当前域中。
When I create a new AppDomain using AppDomain.CreateDomain
in C#, will static constructors be called as asseblies are loaded inside the newly created AppDomain?
The assemblies in question have already been loaded into the current domain.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
否 - 静态构造函数仅在第一次访问静态成员或创建实例时才会被调用。
不过,静态构造函数将为每个
AppDomain
调用一次,如果这是您所关心的。这与在不同的AppDomain
中执行一次不同,新的AppDomain
中的类型未初始化:)请注意,类型的类型初始值设定项没有静态构造函数可能比具有静态构造函数的类型早或晚执行,并且精确的实现细节针对 .NET 4 进行了更改。
No - static constructors will only be called the first time a static member is accessed or an instance is created.
The static constructor will be invoked once per
AppDomain
though, if that's what you were concerned about. It's not like having executed once in a differentAppDomain
, the types in the newAppDomain
get left uninitialized :)Note that type initializers for types without static constructors may be executed earlier or later than those for types with static constructors, and the precise implementation details changed for .NET 4.
检查此网站:http://codeidol.com /csharp/net-framework/Threads,-AppDomains,-and-Processes/AppDomains/
这是摘录:
除非您使用线程静态字段之类的内容,否则每个 AppDomain 都包含所有静态字段的副本。所有类(或静态)构造函数都将在给定的 AppDomain 中运行一次。这意味着,如果您在不同的 AppDomain 中加载相同的程序集,则每个程序集都将运行类构造函数,并且每个程序集都将包含所有静态字段的单独值。
Check this site: http://codeidol.com/csharp/net-framework/Threads,-AppDomains,-and-Processes/AppDomains/
Here is an excerpt:
Unless you use something like thread-static fields, each AppDomain contains a copy of all static fields. All class (or static) constructors will run once within a given AppDomain. This means that if you load the same assembly in different AppDomains, each will run the class constructors, and each will contain separate values for all static fields, for example.