2010-02-09 60 views
8

Tôi có nghi ngờ về lớp tĩnh và phương pháp tĩnh. Từ MSDN, tôi hiểu rằng "Các lớp tĩnh và các thành viên lớp được sử dụng để tạo dữ liệu và các hàm có thể được truy cập mà không cần tạo một cá thể của lớp."Tại sao các lớp tĩnh được sử dụng?

Vì vậy, nếu chúng ta không muốn kết hợp một lớp trong một cá thể, chúng ta sẽ làm cho nó tĩnh. Đó có phải là lợi thế duy nhất không? Bất cứ ai có thể hướng dẫn tôi trong đó kịch bản thời gian thực chúng tôi đi cho lớp tĩnh.

Một số thời gian trong lớp học (không tĩnh) Tôi đang tìm phương pháp tĩnh. Ưu điểm lợi thế/thuận lợi của các phương thức tĩnh đưa ra các phương thức ví dụ trên thực tế.

+0

Câu hỏi liên quan thú vị: http://stackoverflow.com/questions/169378/c-method-can-be-made-static-but-should-it http://stackoverflow.com/questions/731763/should-c-methods-that-can-be-static-be-static http://stackoverflow.com/questions/241339/when-to-use-static-classes-in-c – Jla

Trả lời

19

Đối với các lớp tiện ích, chúng tuyệt vời. Như bạn đã đề cập, chúng tương tự như trạng thái toàn cầu. Vì vậy, đối với các lớp không có trạng thái, vì lợi ích hiệu suất, lớp nên tĩnh.

Mặt khác, các lớp tĩnh khó kiểm tra (nếu chúng chứa trạng thái). Tính đa hình và các khái niệm OO khác cũng bị mất.

Sử dụng một cách khôn ngoan.

+0

Bạn nên lưu ý, hiệu suất đạt được tôi đã đề cập là tầm thường. – Finglas

+0

+ vì mất di sản! –

+0

C# có phương pháp ẩn thông qua từ khóa mới, trong khi nó không giống nhau tôi đã tìm thấy một cách sử dụng cho nó trong công việc C# của tôi.Ngay cả khi vẫn còn, nó bẩn và là một TDDer, statics là một cái gì đó tôi tránh trừ khi nó rơi vào phân khúc lớp tiện ích. – Finglas

6

Áp dụng từ khóa tĩnh cho một lớp là quy ước ngôn ngữ C#, điều đó không có nghĩa gì đặc biệt đối với CLR. Nó chỉ đảm bảo rằng tất cả các thành viên đều tĩnh và bạn không thể vô tình tạo ra một thể hiện của lớp với từ khóa mới mới.

Các giá trị của phương pháp tĩnh được thảo luận trong this thread.

+0

+1, câu trả lời hay – nawfal

2

IMO lớp tĩnh là lập trình thủ tục trong ngụy trang. Không nhất thiết phải là một điều xấu, nhưng nó không phải rất OOPly. Xem ra cho functional decomposition antipattern.

1

Các lớp tĩnh là tuyệt vời để xác định các phương pháp tĩnh. Đây là cách tiếp cận 'lớp tiện ích' cổ điển. Tuy nhiên, hãy cẩn thận với việc lưu trữ trạng thái (tức là định nghĩa các trường) trong một lớp tĩnh. Trong thế giới đa luồng của chúng tôi, điều này có thể dẫn đến hành vi chương trình không thể đoán trước trừ khi bạn đồng bộ hóa quyền truy cập vào các trường tĩnh.

0

Thuộc tính tĩnh được sử dụng chủ yếu để giới thiệu Ngữ cảnh của mã đang chạy. Và bạn có thể tìm thấy xác nhận cho điều đó trong mọi phần của ngăn xếp .NET.
ASP.NET - HttpContext.Current
Threading - Thread.currentThread
WinForms - WindowsFormsSynchronizationContext.Current
WPF - Dispatcher
vv
lớp tĩnh đối với tôi chỉ là container cho phương pháp hữu ích.

0

Lớp tĩnh toàn cầu hóa một biến cụ thể giúp dễ dàng xử lý trong quá trình mã. Do đó ở mức cơ bản, chúng tôi thích sử dụng các lớp tĩnh.

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