2010-08-13 108 views
15

Khi tôi tạo một AppDomain mới bằng cách sử dụng AppDomain.CreateDomain trong C#, các nhà xây dựng tĩnh sẽ được gọi là asseblies được tải bên trong AppDomain mới được tạo ra?Trong .NET, là các hàm tạo tĩnh được gọi khi một AppDomain mới được tạo ra?

Các hội đồng được đề cập đã được tải vào miền hiện tại.

+0

Câu hỏi hay. Trên thực tế các ctors tĩnh không được gọi cho đến khi bạn khởi tạo một đối tượng của lớp, không phải khi assembly được nạp. –

+0

@jdv: Hoặc nếu bạn truy cập một thành viên tĩnh ... –

Trả lời

20

Nhà xây dựng không tĩnh sẽ chỉ được gọi là lần đầu tiên một thành viên tĩnh được truy cập hoặc một cá thể được tạo.

Phương thức khởi tạo tĩnh sẽ được gọi một lần cho mỗi AppDomain, nếu đó là những gì bạn quan tâm. Nó không giống như đã thực hiện một lần trong một khác nhau AppDomain, các kiểu trong mới AppDomain được trái uninitialized :)

Lưu ý rằng loại initializers với nhiều loại mà không constructor tĩnh có thể được thực hiện sớm hơn hay muộn hơn so với các loại với các hàm tạo tĩnh và các chi tiết triển khai chính xác changed for .NET 4.

+0

Liên kết đó để thay đổi cho .NET 4 là xấu –

+0

@ joseph.l.hunsaker: Đã sửa lỗi, cảm ơn. –

4

Kiểm tra trang web này: http://codeidol.com/csharp/net-framework/Threads,-AppDomains,-and-Processes/AppDomains/

Dưới đây là một đoạn trích:

Trừ khi bạn sử dụng một cái gì đó giống như lĩnh vực thread-tĩnh, mỗi AppDomain chứa một bản sao của tất cả các lĩnh vực tĩnh. Tất cả các nhà xây dựng lớp (hoặc tĩnh) sẽ chạy một lần trong một AppDomain đã cho. Điều này có nghĩa rằng nếu bạn nạp cùng một assembly trong các AppDomain khác nhau, mỗi assembly sẽ chạy các hàm tạo lớp và mỗi trường sẽ chứa các giá trị riêng biệt cho tất cả các trường tĩnh, ví dụ.

Các vấn đề liên quan