2012-11-06 19 views
9

Tôi đã tìm kiếm điều này rất nhiều, nhưng không có câu trả lời nào rõ ràng (ít nhất là đối với tôi!). Bây giờ tôi đang đặt câu hỏi này trong SO, vì tôi tin rằng tôi không thể có được một câu trả lời rõ ràng hơn ở bất cứ nơi nào khác.Riêng tư với các nhà thầu tĩnh trong .Net

Khi nào tôi nên sử dụng hàm tạo riêng/tĩnh trong lớp của mình?

Tôi chán ngấy các câu trả lời thông thường, vì vậy hãy giúp tôi với một số ví dụ thời gian thực và các ưu điểm/nhược điểm của việc sử dụng các hàm tạo này.

+4

Nhà xây dựng riêng - nếu bạn không muốn đối tượng của mình có thể được xây dựng từ bên ngoài lớp hiện tại. Hàm khởi tạo tĩnh - nếu bạn cần khởi tạo trạng thái của lớp tĩnh. – zerkms

Trả lời

17

Trình tạo tĩnh: được sử dụng để khởi tạo thành viên tĩnh.

Xây dựng riêng: được sử dụng khi bạn chỉ muốn một lớp được khởi tạo từ bên trong mã riêng của nó (thường là trong một phương thức tĩnh). Ví dụ:

public class Thing 
{ 
    static int Number; 

    static Thing() 
    { 
     Number = 42; // This will only be called once, no matter how many instances of the class are created 
    } 

    // This method is the only means for external code to get a new Thing 
    public static Thing GetNewThing() 
    { 
     return new Thing(); 
    } 

    // This constructor can only be called from within the class. 
    private Thing() 
    { 
    } 
} 
+4

Bạn có thể thực hiện mẫu nhà máy theo cách này - tức là nếu bạn có đối tượng kinh doanh cần phải ở trong một trạng thái 'nhất định' nhưng bạn muốn ngăn chặn bên thứ ba/các dev khác khởi tạo chúng bằng cách sử dụng hàm dựng công khai, bạn có thể làm cho hàm tạo riêng và cung cấp một bộ phương pháp nhà máy để tạo/nhận các đối tượng. Bằng cách này, chúng không thể nhận được đối tượng không trạng thái 'trống' bởi hàm tạo (trừ khi chúng thực sự muốn ví dụ như phản chiếu) – Charleh

+1

Hàm tạo tĩnh cũng có thể được sử dụng để gọi hàm tạo riêng. Hơn hàm static/property chỉ có thể trả về thành viên này, vì vậy luôn luôn chỉ có một thể hiện của đối tượng đó - một singleton. – jwaliszko

3

Hàm tạo tĩnh được sử dụng để intialize thành viên tĩnh của lớp và được gọi khi lần đầu tiên của lớp được tạo hoặc thành viên tĩnh được truy cập lần đầu tiên.

Private constructor được sử dụng nếu bạn có quá tải của các nhà xây dựng, và một số trong số họ chỉ nên được sử dụng bởi các nhà thầu khác

8

Khi nào tôi nên sử dụng một constructor tin trong lớp học của tôi?

Khi bạn muốn một nhà xây dựng, nhưng không muốn để lộ nó ra thế giới. Điều này có thể là do bạn có một phương thức nhà máy gọi hàm tạo (sau khi xác nhận), hoặc bởi vì hàm tạo đó được gọi bằng ctor-chaining (tức là public Foo(string) : this() { ...}).

Ngoài ra, lưu ý rằng mã phản chiếu thường có thể sử dụng một hàm tạo riêng - ví dụ như các thư viện tuần tự hóa hoặc ORM.

Ngoài ra, trong các trình biên dịch C# đầu, khi bạn đang viết cái gì bây giờ là lớp static - có một hàm tạo riêng tư là cách duy nhất làm cho nó xuất hiện không thể xử lý được.

Khi nào tôi nên sử dụng hàm tạo tĩnh trong lớp của mình?

Khi bạn cần khởi tạo một số trạng thái tĩnh trước trạng thái đó đang được truy cập bởi các trường hợp hoặc phương pháp tĩnh.