Extension method (Phương thức mở rộng).
C# 3.0 ra đời kèm theo một loạt các kỹ thuật đinh đám như: Lambda expressions, LINQ … và trong đó “Extension method” là một trong những kỹ thuật khá hay được ra đời cùng với bản cập nhật này. Mới nhìn cái tên chúng ta đã đoán ra được ý nghĩa của nó rồi, nó là những phương thức mở rộng cho tất các các phương thức/đối tượng, từ các đối tượng của Framework cho đến đối tượng chúng ta phát triển đều có thể viết mở rộng được.
Ưu điểm và nhược điểm:
-
Ưu điểm
_ Thêm các phương thức/hành động đến một đối tượng mà bạn không cần kế thừa đối tượng đó.
_ Việc tránh dư thừa và tái sử dụng lại code rất cao. -
Nhược điểm
_ Độ ưu tiên thấp hơn các phương thức chính thống.
_ Nếu đối tượng được mở rộng(đối tượng gốc) mà có thay đổi gì về cấu trúc hay làm ảnh hưởng đến quy tắc viết phương thức mở rộng thì rất có thể là phương thức của bạn sẽ không dùng được nữa.
Một vài điểm chú ý:
_ Phương thức mở rộng không làm thay đổi mã nguồn.
_ Phương thức mở rộng phải là phương thức tĩnh, đi kèm với từ khóa “static”.
_ Muốn sử dụng các lớp mở rộng thì phải using namespace của nó.
_ Luôn đì kèm với từ khóa “this”.
_ Nếu sử dụng visual studio IDE bạn rất rễ nhận thấy phương thức mở rộng khi gọi nó: đó là hình mũi tên nét đứt.
Cú pháp:
Mình sẽ lấy một ví dụ cụ thể nhé.
_ Khối lệnh phía bên trên là mình đang mở rộng cho đối tượng Datetime 4 phương thức: Ngày đầu và cuối của tháng, ngày đầu và cuối cùng của năm. và kết quá sẽ như hình bên dưới.
_ Như hình trên bạn đã thấy 2 phương thức (có hình mũi) tên là FirstDayOfMonth và FirstDayOfYear đã được thêm vào đối tượng Datetime mà vốn ban đầu không hề có từ Microsoft.
_ Vậy là bạn đã hoàn toàn có một lớp mở rộng cho riêng mình, chỉ cần đóng thành DLL là chúng ta có thể sử dụng ở mọi project.
_ Các bạn có thể tham khao thư viện LINQ của Microsoft, điển hình như tại lớp Queryable thì toàn bộ phương thức được viết mở rộng cho các đối tượng như: IQueryable, IEnumerable …
Kết luận: Qua bài chia sẻ này hy vọng các bạn có thể áp dụng tốt về cách sử dụng phương thức mở rộng, một cấu trúc code tốt + với sử dụng phương thức mở rộng hợp lý thì chắc chắn code của bạn maintain về sau rất là có lợi thế.
Techtalk via Viblo