Tôi viết một hàm tạo khi tạo cá thể không có tác dụng phụ, tức là khi điều duy nhất mà hàm tạo đang làm là khởi tạo các thuộc tính. Tôi viết một phương thức tĩnh (và làm cho hàm tạo riêng) nếu việc tạo cá thể làm một cái gì đó mà bạn thường không mong đợi một hàm tạo để làm.
Ví dụ:
public class Foo
{
private Foo() { }
private static List<Foo> FooList = new List<Foo>();
public static Foo CreateFoo()
{
Foo f = new Foo();
FooList.Add(f);
return f;
}
}
Bởi vì tôi tuân theo quy ước này, nếu tôi thấy
Foo f = Foo.CreateFoo();
Bar b = new Bar();
khi đọc mã của tôi, tôi có một tập hợp rất khác nhau của những kỳ vọng về những gì mỗi người trong số hai dòng đang làm. Mã đó không nói cho tôi biết điều gì tạo nên một Foo khác với việc tạo ra một Bar, nhưng nó nói với tôi rằng tôi cần phải nhìn.
Nguồn
2008-10-11 20:06:18
Đã thêm "phương thức" vào tiêu đề, nếu không, nó cho thấy lựa chọn là giữa một hàm tạo cá thể hoặc một hàm tạo tĩnh. (Văn bản rõ ràng, nhưng tiêu đề đã kích động một câu hỏi "Huh?" Nhất định trong tâm trí của tôi :) –
@JonSkeet Chỉnh sửa của bạn đã được hoàn tác :) – gcampbell
@gcampbell: Sẽ làm lại sau đó, xem xét câu hỏi rõ ràng * không * về các hàm tạo tĩnh ... –