Tôi có một đoạn mã như sau:Khi nào chính xác để tạo một phương pháp mở rộng?
public class ActivityHelper
{
public void SetDate(IList<Activity> anActivityList)
{
foreach(Activity current in anActivityList)
{
current.Date = DateTime.Now;
}
}
//More methods, properties, fields, etc...
}
Điều này có thể dễ dàng được chuyển đổi sang một phương pháp mở rộng. Ví dụ:
public static void SetDate(this IList<Activity> aList)
{
foreach(Activity current in anActivityList)
{
current.Date = DateTime.Now;
}
}
Chức năng ban đầu không sử dụng bất kỳ dữ liệu cụ thể hoặc phương pháp nào từ lớp ActivityHelper làm cho nó có vẻ không đúng. Đây có phải là thời điểm chính xác để viết một phương pháp mở rộng không? Các kịch bản chính xác để tạo phương pháp mở rộng là gì?
Dường như bạn đang đặt câu hỏi sai. Cho dù bạn làm cho nó một phương pháp mở rộng hay không là phần lớn không quan trọng. Nhưng bạn gần như chắc chắn sẽ làm cho nó một phương pháp ** tĩnh ** một trong hai cách. Phương thức đầu tiên của bạn là không tĩnh mặc dù không sử dụng thành viên cá thể nào; đây là một (nhỏ) thiết kế faux-pas. – Timwi
@Timwi Có, tôi rất có thể làm cho phương pháp đó tĩnh và không có lý do cụ thể tại sao tôi không có trong ví dụ này. Trong cả hai trường hợp, tôi vẫn cảm thấy nó là một phương pháp khó xử. – brainimus
Tôi tìm các phương thức mở rộng được sử dụng tốt nhất khi hội đồng hoặc lớp đích được "đóng để cập nhật". Tôi cũng tìm thấy những người sử dụng sai các phương pháp mở rộng để có được nguyên tắc về trách nhiệm duy nhất (SRP). Theo tôi, các lớp tĩnh và các phương thức mở rộng là những khả năng bị sử dụng nhiều nhất. –