Tìm hiểu C# 3.0: Extension Method

Tối thứ 7 lạnh lẽo, không biết làm gì bây giờ. Đành lên blog post tiếp bài viết trong seri bài về Tìm hiều C# 3.0. Lần này, tôi xin trình bày về Extension Method. Ở bài viết đầu, tôi đã từng nói rằng có thể sử dụng Extension Method để thay thế Visitor pattern để giải quyết bài toán được trình bày trong bài viết đó. Vậy thì Extension Method là gì trong C# 3.0? Tôi sẽ trả lời các bạn ngay bây giờ đây.

Ở C# 1.* và 2.0, khi các bạn sử dụng kiểu dữ liệu String, Int32 hay kiểu Person nào đó của third party library, các bạn cần sử dụng method mới kiểu dữ liệu thì thật là phiền hà. Trong trường hợp đó, các bạn có thể viết class mới và kế thừa từ class đã có hoặc wrap class đã có và viết method mới cần sử dụng. Nhưng không may là phương pháp này không phải lúc nào cũng suôn sẻ, ví dụ trong trường hợp class đã có là abstract hay sealed class.

Và Extension Method có thể giải quyết mối băn khoăn của bạn. Extension Method là static method nhưng có tác dụng lên 1 kiểu dữ liệu, tức là bạn có thể invoke method đó thông qua 1 instance. Nghĩa là bạn có thể sử dụng extension method để mở rộng kiểu dữ liệu đã có với các method mới.

Vi dụ ta cần thêm method GetComparerInfo vào class ItemInfo để sử dụng

ItemInfo itemInfo = GetItemInfo();

ComparerInfo comInfo = itemInfo.GetComparerInfo();

// … do some stuffs with comInfo

Cách làm là như sau:
Ta thêm 1 class, ví dụ tên là Extensions chứa method GetComparerInfo như sau:

public class Extenstions

{

public static ItemInfo GetComparerInfo(this ItemInfo itemInfo)

{

// return new ItemInfo…

}

}

Extension Method được tạo ra nhờ từ khóa staticthis như trên. Để import extension method, ta chỉ việc sử dụng using-namespace-directives.
Như vậy, tôi đã trình bày cách sử dụng tính năng Extension method trong C# 3.0. Việc áp dụng tính năng này sẽ giúp hệ thống dễ mở rộng
và maintain.

Rgds
Nguyễn Minh Dũng

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: