Phương pháp tĩnh nhanh hơn rất nhiều và sử dụng ít bộ nhớ hơn nhiều. Có quan niệm sai lầm rằng nó chỉ nhanh hơn một chút. Đó là một chút nhanh hơn miễn là bạn không đặt nó trên các vòng. BTW, một số vòng trông nhỏ nhưng thực sự không phải vì cuộc gọi phương thức có chứa vòng lặp cũng là một vòng lặp khác. Bạn có thể cho biết sự khác biệt trong mã thực hiện chức năng hiển thị. Rất ít bộ nhớ không may là đúng trong nhiều trường hợp. Một ví dụ cho phép dễ dàng chia sẻ thông tin với các phương thức chị em. Một phương pháp tĩnh sẽ yêu cầu thông tin khi anh ta cần.
Nhưng cũng giống như trong việc lái ô tô, tốc độ mang lại trách nhiệm. Các phương thức tĩnh thường có nhiều tham số hơn so với các đối tác thể hiện của chúng. Bởi vì một cá thể sẽ xử lý các biến được chia sẻ trong bộ nhớ đệm, các phương thức cá thể của bạn sẽ trông đẹp hơn.
ShapeUtils.DrawCircle(stroke, pen, origin, radius);
ShapeUtils.DrawSquare(stroke, pen, x, y, width, length);
VS
ShapeUtils utils = new ShapeUtils(stroke,pen);
util.DrawCircle(origin,radius);
util.DrawSquare(x,y,width,length);
Trong trường hợp này, bất cứ khi nào các biến được sử dụng bởi tất cả các phương pháp hầu hết thời gian, phương pháp dụ là khá giá trị nó. Các trường hợp KHÔNG GIỚI THIỆU NHÀ NƯỚC, nó là về CHIA SẺ mặc dù NHÀ NƯỚC COMMON là một dạng tự nhiên CHIA SẺ, họ KHÔNG PHẢI LÀ CÙNG. Quy tắc chung của ngón tay cái là: nếu phương pháp được kết hợp chặt chẽ với các phương pháp khác --- chúng yêu nhau rất nhiều khi chúng được gọi, người kia cần được gọi và chúng có thể chia sẻ cùng một cốc nước-- -, nó nên được làm ví dụ. Để dịch các phương thức tĩnh thành các phương thức instance thì không khó. Bạn chỉ cần lấy các tham số được chia sẻ và đặt chúng dưới dạng các biến mẫu. Cách khác xung quanh là khó hơn.
Hoặc bạn có thể tạo lớp proxy sẽ kết nối các phương pháp tĩnh. Trong khi nó có vẻ là không hiệu quả hơn trong lý thuyết, thực hành cho một câu chuyện khác nhau. Điều này là bởi vì bất cứ khi nào bạn cần gọi một DrawSquare một lần (hoặc trong một vòng lặp), bạn đi thẳng đến phương thức tĩnh. Nhưng bất cứ khi nào bạn sẽ sử dụng nó hơn và hơn cùng với DrawCircle, bạn sẽ sử dụng proxy cá thể. Một ví dụ là các lớp System.IO FileInfo (instance) vs File (tĩnh).
Phương pháp tĩnh có thể kiểm tra. Trong thực tế, thậm chí nhiều testable hơn ví dụ một lần. Phương pháp GetSum (x, y) sẽ rất có thể kiểm tra để không chỉ kiểm tra đơn vị mà còn kiểm tra tải, thử nghiệm tích hợp và kiểm tra sử dụng. Phương pháp cá thể là tốt cho các bài kiểm tra đơn vị nhưng khủng khiếp cho mọi bài kiểm tra khác (mà quan trọng hơn các bài kiểm tra đơn vị BTW) đó là lý do tại sao chúng tôi nhận được rất nhiều lỗi trong những ngày này. Điều làm cho ALL Methods untestable là các tham số không có ý nghĩa như (Sender s, EventArgs e) hoặc trạng thái toàn cục như DateTime.Now. Trong thực tế, các phương thức tĩnh rất tốt ở khả năng kiểm thử mà bạn thấy ít lỗi trong mã C của một bản phân phối Linux mới hơn so với trình lập trình OO trung bình của bạn (anh ta có đầy đủ các lỗi mà tôi biết).
Tôi nghĩ rằng điều này sẽ được di chuyển đến CS.SE –