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:
- Extension method là gì?
- Các đặc điểm của extension method
- Cách viết một extension method
- Demo extension method
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
– 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
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
– 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
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
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!!!!
[…] Trong code example này có sử dụng đến kiến thức của Extension method trong VB.Net […]