Lập trình VB.Net

Extension method trong VB.Net

Extension method trong VB.Net
Được viết bởi Minh Hoàng

Series lập trình VB.NET, ngôn ngữ lập trình hướng đối tượng .NET Framework

Trong bài viết này chúng ta sẽ tìm hiểu extension method trong VB.Net với những nội dung sau:

  1. Extension method là gì?
  2. Các đặc điểm của extension method
  3. Cách viết một extension method
  4. Demo extension method
1. Extension method là gì?
1. Extension method là gì?

Extension method là phương thức mở rộng cho phép bạn thêm một phương thức tự định nghĩa vào một lớp hiện có, mà không cần phải kế thừa lại lớp đó. Phương thức mở rộng có thể được gọi như một thể hiện của lớp đó, tức là cũng được gọi như các phương thức có sẵn.

2. Các đặc điểm của extension method
2. Các đặc điểm của extension method

Extension method chỉ có thể được định nghĩa cho Sub procedure hoặc Function procedure. Bạn không thể định nghĩa một extension property, field, hay event.

– Tất cả extension methods cần phải được đánh dấu bằng extension attribute <Extension()> từ namespace System.Runtime.CompilerServices, do đó cần phải Imports namespace này.

Tham số đầu tiên của một extension method là bắt buộc, nó xác định loại kiểu dữ liệu (data type) mà phương thức sẽ mở rộng, nên không được là option. Khi phương thức được thực thi, thì tham số đầu tiên sẽ được bỏ qua, truyền tham số cho extension method được tính từ tham số thứ hai.

・ Do đó khi định nghĩa extension methods không được dùng Optional parameters và ParamArray parameters là tham số đầu tiên, vì cả 2 loại tham số này chỉ được đứng cuối cùng trong danh sách tham số.

– Các loại types nào thì có thể mở rộng (extend)?
Bạn có thể định nghĩa một extension methods cho hầu hết các types trong Visual Basic như:

  • Classes (reference types)
  • Structures (value types)
  • Interfaces
  • Delegates
  • ByRef arguments, ByVal arguments
  • Generic method parameters
  • Arrays
3. Cách viết một extension method
3. Cách viết một extension method

Các bước định nghĩa một phương thức mở rộng trong VB.Net:

#1. Tạo một project Visual Basic mới hoặc mở project hiện có trong Visual Studio.

#2. Import ở đầu file mà có phương thức bạn muốn định nghĩa nó là extension method câu lệnh sau:

Imports System.Runtime.CompilerServices

#3. Đặt extension attribute trên phương thức mà bạn muốn phương thức đó là extension method:

<Extension()>

#4. Khai báo phương thức của bạn như bình thường thường, chú ý là kiểu dữ liệu của tham số đầu tiên chính là kiểu dữ liệu mà bạn muốn mở rộng phương thức cho nó.

Public Sub subName( ByVal para1 As ExtendedType, <other parameters> )
    ' < Body of the method >  
End Sub
4. Demo extension method
4. Demo extension method

– Trong ví dụ bên dưới, mình tạo một project Visual Basic có tên là MinhHoangBlog, sau đó tạo module StringExtensions, trong đó sẽ định nghĩa một extension method. Ở module thứ 2 Module1 sẽ import module StringExtensions để có thể gọi extension method PrintConsole (The extension method must be in scope when it is called).

– Extension method PrintConsole sẽ mở rộng cho class String một method hiển thị một chuỗi mà theo sau đó là ký tự được truyền vào cho tham số của method.

■ Nội dung module StringExtensions

[code language=”vb” highlight=”2,6,7″] ‘ Khai báo extension method thường được đặt trong một module riêng biệt
Imports System.Runtime.CompilerServices

Module StringExtensions

<Extension()>
Public Sub PrintConsole(ByVal extString As String,
ByVal paraOption As String)

‘ In chuỗi ra console
Console.WriteLine(extString & paraOption)

End Sub

End Module
[/code]

■ Nội dung module Module1

[code language=”vb” highlight=”2,10,11″] ‘ Import module đã định nghĩa extension method mà bạn muốn sử dụng
Imports MinhHoangBlog.StringExtensions

Module Module1

Sub Main()

Dim example = "Hello"

example.PrintConsole( "?" )
example.PrintConsole( "!!!!" )

Console.ReadKey()

End Sub

End Module
[/code]

Lưu ý: extension method PrintConsole được định nghĩa với hai tham số và khi gọi thì chỉ truyền vào một tham số. Tham số đầu tiên extString, là để xác định sẽ mở rộng phương thức cho class String, nên khi gọi không truyền vào tham số này.

Khi thực hiện đoạn chương trình trên thì kết quả sẽ hiện thị là:

Hello?
Hello!!!!
Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

1 bình luận

Translate »