Các lớp tĩnh được sử dụng khi bạn không định tạo đối tượng. Bạn nhận được một "trường hợp" của lớp đó - bạn không thể làm những việc như:
MyStaticClass m = new MyStaticClass();
m.SomeFunc();
khi bạn có một lớp tĩnh. Thay vào đó bạn sẽ sử dụng nó bằng cách sử dụng tên lớp. Một cái gì đó như:
MyStaticClass.SomeFunc();
Bạn sẽ sử dụng cái gì để theo dõi mọi đối tượng Khách hàng? Bạn có thể sử dụng một số loại bộ sưu tập để giữ chúng. Cấp, trong một hệ thống thực sự sẽ có một số loại bền bỉ, có thể là một cơ sở dữ liệu, để giữ dữ liệu. Nhưng bạn chỉ có thể làm một cái gì đó như:
IEnumerable<Customer> Customers = new List<Customer>();
Và sau đó thêm khách hàng của bạn vào danh sách đó
Customers.Add(new Customer() { ... });
Quay lại câu hỏi về phương pháp tĩnh ...
Vì vậy, thỏa thuận ở đây là bạn sẽ không tham chiếu đến các thành viên trong một phương thức tĩnh, vì vậy bạn sẽ không sử dụng các phương thức tĩnh để cập nhật địa chỉ của một Khách hàng cụ thể. Giả sử lớp khách hàng của bạn trông giống như:
public class Customer
{
public string Address { get; set; }
}
Bạn không thể sử dụng một phương pháp tĩnh như
public static void SetAddress()
vì mỗi khách hàng (có lẽ) có một địa chỉ khác. Bạn không thể truy cập địa chỉ của khách hàng ở đó bởi vì địa chỉ đó không tĩnh. Nhận được rằng? Thay vào đó, bạn sẽ sử dụng một phương thức tĩnh nếu bạn muốn làm điều gì đó không cần phải xử lý dữ liệu cá thể. Tôi sử dụng phương pháp tĩnh cho những thứ như chức năng tiện ích.
public static double ComputeSomething(double someVal) { ... }
Ở đây, hàm ComputeSomething có thể được gọi bởi bất cứ ai như:
var result = MyStaticClass.ComputeSomething(3.15);
Các takeaway ở đây là tĩnh lớp không được sử dụng để nhanh chóng đối tượng, thay vì chúng được sử dụng thực sự như một container thuận tiện để giữ chức năng. Các hàm tĩnh là có thể nằm trên lớp không tĩnh nhưng không thể truy cập bất kỳ dữ liệu cá thể nào.
Một nơi có chức năng tĩnh sẽ được sử dụng cho mẫu Singleton. Bạn làm cho hàm tạo không công khai để mọi người không thể gọi nó, và thay vào đó cung cấp một phương thức tĩnh trên lớp để trả về cá thể duy nhất của lớp đó. Một cái gì đó như:
public class MySingleton
{
private static MySingleton instance;
private MySingleton() {}
public static MySingleton Instance
{
get
{
if (instance == null)
{
instance = new MySingleton();
}
return instance;
}
}
}
@slugster Điểm công bằng. – nickhar
Danh sách và các loại bộ sưu tập khác là quan trọng. Kiểm tra MSDN, quá: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx –
varg