Extension Methods trong .NET 3.5
.NET, C#, Tutorials June 15th, 2008Vấn đề
Như các bạn đã biết thì khi ta muốn thêm một method nào đó vào một class thì bạn phải sửa code và biên dịch lại assembly chứa class đó. Rõ ràng điều này chỉ “tạm chấp nhận” khi code đó chính là do bạn tạo ra, do bạn giữ bản quyền chứ không thể khi ta sử dụng các library của người khác.
Thật ra, nếu nói cho đúng thì có 2 cách mà bạn có thể workaround cái vấn đề này :
- Thứ nhất. Inherit cái class bạn muốn thêm method
- Thứ hai. Tạo một static class mới với đầu vào là class muốn thêm method và đầu ra là class sau khi bạn đã thao tác trong method này. (thường thấy mọi người hay dùng kiểu này)
Tuy nhiên chúng ta hãy xem xét các mặt không có lợi khi áp dụng các phương thức trên :
- Phương thức 1 : Vấn đề xảy ra khi class bạn muốn thêm method không cho inherit. Tiêu biểu là sealed classes như String, Int16, Int32, … Hơn nưã giả sử inherit được thì nó lại gây khó khăn khi sử dụng, ví dụ như thay vì dùng một cách tự nhiên là String thì bạn phải sử dụng MyString, ModedString, …. Không hề tự nhiên.
- Phương thức 2 : Có thể tạm chấp nhận được nhưng nó đi ngược với tư tưởng hướng đối tượng, cách viết method sẽ trở về “nguyên thủy” khi làm việc với struct, function, … Bạn sẽ phải String x = MyClass.Modify(inputString) thay vì x = x.Modify()
Và điều này đã được giải quyết khá gọn gàng trong .NET 3.5 (thực ra là từ .NET 3.0) với Extenstion Methods
Cách sử dụng Extension Methods
Khi sử dụng Extension Methods bạn cần chú ý 3 điểm :
- Class chứa extension method phải là static class
- Extension method phải là static method
- Sử dụng từ khóa this khi truyền đối tượng vào
“Một ngàn lời nói không bằng một bức ảnh” . Xem hình sẽ rõ
Giả sử nhc đang có ý định viết thêm một method RemoveSpace vào class String thì code sẽ như sau :

Khi sử dụng thì nó sẽ trông như thế này

Ok chỉ đơn giản vậy thôi, nếu bạn muốn biết sâu hơn về Extension Methods bạn có thể search trên Google với keywords “Extension Methods” là sẽ tìm được nhiều bài hay để đọc. Chúc may mắn
NHC | ExD group
Recent Comments