2013-05-04 20 views
8

Tôi có một lớp với một hàm tạo tĩnh.Làm thế nào để đảm bảo rằng một nhà thầu tĩnh được gọi mà không cần gọi bất kỳ thành viên

Tôi muốn hàm dựng tĩnh được gọi mà không cần gọi hoặc sử dụng bất kỳ thành viên nào của nó, nhưng chỉ khi hàm tạo chưa được gọi.

Tôi đã thử sử dụng phản chiếu. Với sự phản chiếu, tôi có thể gọi hàm tạo tĩnh (nhiều lần), nhưng tôi không thể tìm ra nếu nó đã được gọi trước đó.

Làm cách nào để thực hiện việc này?

CHỈNH SỬA
Đây không chỉ là MỘT lớp tôi đang nói đến, nó có thể nhiều hơn. Giả sử, tất cả các lớp được đánh dấu bằng thuộc tính đặc biệt.

+1

Đặt một lá cờ. Bạn sẽ chỉ cần chạy một hàm tạo tĩnh nếu bạn đang thiết lập một số trạng thái tĩnh, vì vậy hãy đặt trạng thái đó và chỉ xem nó có được thiết lập nếu hàm khởi tạo lại chạy hay không. –

+0

@ Robert: Tôi cần nó là một giải pháp chung. Tôi không biết trước bao nhiêu lớp và lớp nào. Flagging nó sẽ không giúp đỡ vì .NET sẽ không thiết lập cờ đó khi anh ta gọi hàm tạo. –

+0

Giờ bạn đã khiến tôi tò mò. Tại sao bạn cảm thấy cần thiết để chạy constructor * trước * mọi thành viên được gọi, nếu đó là những gì nó sẽ làm gì? (constructor tĩnh sẽ được gọi ngay trước khi thực hiện phương thức đầu tiên hoặc gọi thuộc tính. Bất kỳ trạng thái tĩnh nào là không liên quan cho đến khi phương thức hoặc thuộc tính đầu tiên được chạm vào). –

Trả lời

24

Bạn có thể sử dụng phương pháp RuntimeHelpers.RunClassConstructor (giả định rằng tôi đúng hiểu những gì bạn đang cố gắng để làm ...)

RuntimeHelpers.RunClassConstructor(typeof(YourType).TypeHandle); 
+0

Liệu nó chỉ chạy hàm tạo một lần? –

+1

@RobertHarvey, vâng, nó chỉ chạy hàm tạo tĩnh một lần, ngay cả khi bạn gọi nó nhiều lần. –

+1

Yup, tôi vừa kiểm tra và điều này có vẻ hoạt động tốt. –

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