2011-01-21 37 views
5

Tôi có một chức năng thành viên không phụ thuộc vào bất kỳ biến thành viên nào của lớp. (trong trường hợp của tôi, lớp học là một Trang ASP.Net)Sử dụng các chức năng tĩnh có tốt hơn nếu không có thành viên lớp học nào cần thiết?

Chức năng này được bảo vệ, tôi không cần nó bên ngoài lớp này. Mục đích duy nhất của nó là xây dựng một URL từ một đối tượng cụ thể.

Tôi có nên làm cho tất cả các chức năng của mình tĩnh nếu chúng không phụ thuộc vào lớp học, ngay cả khi chúng không được sử dụng bên ngoài lớp này? Có lý do nào như hiệu suất hay khả năng bảo trì để làm như vậy không?

Trả lời

5

Tốt nhất là thực hiện các chức năng không tương tác với dữ liệu thành viên tĩnh. Nó chỉ giúp mô tả cách chức năng tương tác với môi trường của nó. Không nên có vấn đề hiệu suất mặc dù.

+2

Có một vấn đề về hiệu năng nhỏ (không ẩn thông số này) nhưng đó không phải là yếu tố quyết định. Ý định (điểm 1 của bạn) quan trọng hơn. –

+0

@ Henk Holterman: Tất nhiên, nhưng đó là một vấn đề hiệu suất rất nhỏ. Nếu nó là một chức năng bảo vệ tĩnh, nó có thể là một số loại hàm trợ giúp, do đó nó đã hoặc đang truyền vào và/hoặc trả về dữ liệu. –

1

Tôi không thể nói rằng tôi biết đủ về hiệu suất, nhưng tôi đã nghe nói rằng nên làm cho nó tĩnh nếu không phụ thuộc vào thành viên của lớp. Thông thường nó mang lại cho bạn lợi ích của việc không phải lãng phí một phân bổ trong trường hợp bạn chỉ cần phương pháp đó, nhưng vì nó chỉ nằm trong lớp cho bạn, bạn có thể đã làm việc với một thể hiện của đối tượng của bạn. Tôi sẽ làm cho nó tĩnh, nhưng trong trường hợp của bạn tôi không biết nếu có nhiều sự khác biệt (từ một quan điểm mã hóa).

1

Nếu bạn đặt phương thức tĩnh, bạn sẽ không cần phải khởi tạo lớp để sử dụng nó. Điều này sẽ nhanh hơn. Ngoài ra, nếu tĩnh của nó tôi tìm thấy nó làm cho đoạn mã ngắn hơn một chút.

Tôi không nghĩ có bất kỳ vấn đề về hiệu suất nào với tĩnh, nếu có bất kỳ điều gì nhanh hơn. Chỉ cần nghĩ về tất cả các phương pháp mở rộng đã xuất hiện trong các phiên bản mới hơn của .net. tất cả đều tĩnh!

6

Có thể, nhưng tôi sẽ tiến thêm một bước nữa.

Trong những trường hợp này, bạn thực sự muốn tự hỏi mình liệu phương pháp đó có thuộc về loại này hay không. Nếu phương pháp này không phụ thuộc vào dữ liệu của loại, tại sao nó là một phần của loại đó? Có loại tốt hơn hay phù hợp hơn không? Bạn có một số trong số này, có lẽ nằm rải rác trong một vài loại khác nhau, mà có thể được nhóm hợp lý với nhau?

0

Nó thực sự phụ thuộc. Cho dù phương pháp của bạn có sử dụng bất kỳ dữ liệu cá thể nào hay không là chi tiết triển khai của phương pháp này. Nếu đó là riêng tư hơn bạn có thể làm cho nó tĩnh nếu bạn muốn. Tuy nhiên, nếu nó có thể được nhìn thấy bên ngoài lớp học của bạn (ví dụ như phương pháp được bảo vệ), bạn nên suy nghĩ về giao diện đầu tiên và làm cho nó tĩnh chỉ nếu nó sẽ không bao giờ có ý nghĩa cho phương pháp này để truy cập dữ liệu đối tượng.

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