lớp tĩnh có thể hữu ích trong các tình huống nhất định, nhưng có một tiềm năng lạm dụng và/hoặc lạm dụng chúng, giống như hầu hết các tính năng ngôn ngữ.
Như Dylan Smith đã đề cập, trường hợp rõ ràng nhất để sử dụng lớp tĩnh là nếu bạn có một lớp chỉ với các phương thức tĩnh. Không có điểm cho phép các nhà phát triển khởi tạo một lớp như vậy.
Thông báo trước là một sự dư thừa các phương pháp tĩnh có thể tự cho biết một lỗ hổng trong chiến lược thiết kế của bạn. Tôi thấy rằng khi bạn đang tạo ra một hàm tĩnh, nó là một điều tốt để tự hỏi bản thân - nó có phù hợp hơn với phương thức cá thể hay không, hoặc b) một phương thức mở rộng cho một giao diện. Ý tưởng ở đây là hành vi đối tượng thường được liên kết với trạng thái đối tượng, có nghĩa là hành vi phải thuộc về đối tượng. Bằng cách sử dụng hàm tĩnh bạn ngụ ý rằng hành vi không nên thuộc về bất kỳ đối tượng cụ thể nào.
Thiết kế đa hướng và giao diện điều khiển bị cản trở bởi việc lạm dụng các hàm tĩnh - chúng không thể được ghi đè lên trong các lớp dẫn xuất cũng như chúng không được gắn vào một giao diện.Thường thì tốt hơn để có các hàm 'trợ giúp' của bạn gắn với một giao diện thông qua một phương thức mở rộng sao cho tất cả các phiên bản của giao diện đều có quyền truy cập vào chức năng 'trợ giúp' được chia sẻ đó. Một trong những tình huống mà các hàm tĩnh chắc chắn hữu ích, theo ý kiến của tôi, là tạo ra một phương thức .Create() hoặc .New() để thực hiện logic cho việc tạo đối tượng, ví dụ khi bạn muốn proxy đối tượng được tạo ra, ví dụ:
public class Foo
{
public static Foo New(string fooString)
{
ProxyGenerator generator = new ProxyGenerator();
return (Foo)generator.CreateClassProxy
(typeof(Foo), new object[] { fooString }, new Interceptor());
}
Điều này có thể được sử dụng với khung ủy quyền (như Castle Dynamic Proxy), nơi bạn muốn chặn/chèn chức năng vào đối tượng, dựa trên một số thuộc tính nhất định. Ý tưởng tổng thể là bạn cần một hàm tạo đặc biệt vì về mặt kỹ thuật bạn đang tạo một bản sao của cá thể ban đầu với chức năng được thêm vào đặc biệt.
Nguồn
2011-10-28 19:24:21
các lớp/phương pháp tĩnh là ví dụ hữu ích để triển khai mẫu Singleton và mẫu Nhà máy ... – Yahia
@Yahia: Mẫu Singleton có các lớp tĩnh? [Tôi không nghĩ vậy.] (Http://stackoverflow.com/questions/3565482/can-singleton-class-be-static/3565496#3565496) – BoltClock
@BoltClock NẾU bạn đọc kỹ thì tôi đã viết "lớp tĩnh/phương pháp "và tôi khá chắc chắn phương pháp tĩnh là hữu ích khi thực hiện một mẫu Singleton ... – Yahia