Blog chia sẽ kinh nghiệm lập trình và Technical VN. Nơi mà các bạn có thể học tập và tham khảo về những công nghệ mới nhất hiện nay về .NET
Thứ Bảy, 20 tháng 12, 2014
On 12:07 by Tuan Pham in Chuyên Đề Lập Trình .NET, Extension Methods, Kinh Nghiệm Lập Trình, methods No comments
Hôm nay tôi sẽ nói về một cách đơn giản để thêm một phương thức bất kỳ bên ngoài vào cách hành xử của đối tượng mà không hề ảnh hưởng đến code của class mô tả đối tượng đó.
Tôi sẽ đặc vấn đề ngắn gọn như sau, tôi có một đối tượng là Student, đối tượng này có hai thuộc tính Name, Index và không có phương thức hành xử nào. Giả sử tôi muốn in thông tin của từng học sinh với Name và Index tôi sẽ làm sao, chắc chắn sẽ thế này:
[code language="csharp"]
Console.WriteLine("Student #{0} Name = {1}", student.Index, student.Name);
[/code]
Như thế là quá đẹp rồi, và vấn đề là tôi có 10000 chổ trong ứng dụng của mình cần in thông tin như trên, và tôi nghĩ ra cách là viết một phương thức PrintInfo() cho class Student và mỗi lần muốn in thông tin thì gọi; xét về logic thì không chê được, nhưng chúng ta làm việc về mặt đối tượng thì hoàn toàn không phù hợp vì đối tượng Student không thể có cách hành xử là tự print thông tin chính mình(ví dụ khi đi mua vé xe), thế thì làm cách nào giải quyết, không lẽ phải viết 10000 dòng code print thông tin như trên. Để làm điều khó khăn đó chúng ta nghĩ ngay đến Extension Methods, cách thực hiện như sau.
Tôi có lớp Student
[code language="csharp"]
// Lớp Student
public class Student
{
public string Name { set; get; }
public int Index { set; get; }
}
[/code]
Tôi tạo lớp StudentExt - Extension Methods phải static, để ý từ khóa this trong đối số của hàm ToInfo, chú ý rằng hàm ToInfo không có đối số(tường minh) truyền vào khi sử dụng nhé, đối số ta đang thấy(this Student student) chỉ thể hiện là hàm này chỉ dùng cho đối tượng Student và "this Student student" chính là đối tượng gọi ToInfo().
[code language="csharp"]
// Lớp chứa Extension Methods
public static class StudentExt
{
// không có đối số tường minh
public static string ToInfo(this Student student)
{
return string.Format("Student #{0} Name: {1}", student.Index, student.Name);
}
// Extension Methods với một đối số
public static string ToInfo(this Student student, string txtfont)
{
return string.Format("{0} #{1} Name: {2}",txtfont, student.Index, student.Name);
}
}
[/code]
Chúng ta dùng nó như sau.
[code language="csharp"]
static void Main(string[] args)
{
var student0 = new Student(){Name = "Nguyen A",Index = 0};
var student1 = new Student(){Name = "Nguyen B",Index = 1};
Console.WriteLine(student0.ToInfo());
Console.WriteLine(student1.ToInfo("Best student"));
Console.ReadKey();
}
[/code]
Kết quả:
[caption id="attachment_182" align="aligncenter" width="300"]
Phạm Tuân[/caption]Chúc các bạn thành công!
Phạm Tuân
Đăng ký:
Đăng Nhận xét (Atom)
Search
Popular Posts
-
Phong cách thiết kế Material Design nhắm đến những đường nét đơn giản, sử dụng nhiều mảng màu đậm nổi bật, các đối tượng đồ họa trong giao ...
-
Hôm nay tôi sẽ giới thiệu với các bạn một Framework đến từ Microsoft - framework này không quá lớn nhưng là khá mạnh khi các bạn làm việc vớ...
-
WPF vượt trội hơn Winform về khoản Drawing , trong đó đặc biệt WPF hỗ trợ đồ họa rất tốt vì nó tương tác trực tiếp đến GPU. Hôm nay chúng t...
-
Hôm nay chúng ta sẽ tìm hiểu cách tạo ra các menu chuột phải trên ứng dụng WPF của mình. Ở bài này chúng ta xoay quanh việc tìm hiểu cách tạ...
-
Để dễ hiểu, các bạn hãy hình dung rằng: cùng một tập tin thực thi *.EXE nhưng bạn DoubleClick 10 lần cách quãng vào nó thì chuyện gì sẽ sảy ...
-
Trong bài viết trước tôi có giới thiệu về Extension Methods trong nguôn ngữ lập trình C#; hôm nay tôi sẽ nói về một vấn đề có ý nghĩa tương...
-
Hôm nay chúng ta sẽ thử đo xem thời gian query Data của "Foreach vs LinQ vs LinQasParallel" như thế nào. Tôi tạo một tool nhỏ để l...
-
Data Binding là kĩ thuật dùng để tạo gắn kết giữa phần giao diện ( UI ) và dữ liệu thông qua phần business logic hoặc giữa các đối tượng UI...
-
LOG4NET là một thư viện mã nguồn mở cho phép chúng ta tạo ra một hoặc nhiều tập tin log, kiểu log cũng như nội dung log một cách linh hoạt v...
-
Sau hai bài giới thiệu về Caliburn.Micro framework, hôm nay chúng ta sẽ cùng bắt tay vào làm một dự án nhỏ - HelloWorld. Step 1: Add referen...
Recent Posts
Blog Archive
-
▼
2014
(18)
-
▼
tháng 12
(18)
- WPF - Các Vấn Đề Về Multi-Thread Trong WPF (Đa Luồng)
- Modern UI For WPF Thiết Kế Giao diện Modern Win8 V...
- WPF - Thiết Kế Giao Diện METRO Win8 Với Thư Viện M...
- WPF - Validation ValidationRule và Vấn Đề Về Thông...
- WPF - Validation ValidationRule và Vấn Đề Về Thông...
- Parallel Class Trong C# và Vấn Đề Xử lý Song Song
- Tìm Hiểu Về Delegate Trong C# và Cách Truyền Dữ Li...
- Extension Methods - Thêm Một Phương Thức Ngoài Vào...
- Indexer trong C# - Kỹ Thuật Duyệt Qua Phần Tử Tron...
- SourceCode - DataBinding và ValueConverter
- WPF - DataBinding và chuyển đổi kiểu dữ liệu IValu...
- SourceCode - DataBinding và UpdateSourceTrigger
- WPF - DataBinding và cở chế tự động update dữ liệu
- SourceCode - DataBinding
- WPF – Cơ Bản về Data Binding
- WPF - Bộ Công Cụ Đắc Lực Cho Thiết Kế Expression S...
- WPF - Các Thành Phần Của WPF
- WPF - Tổng quan về Windows Presentation Foundation
-
▼
tháng 12
(18)
0 nhận xét:
Đăng nhận xét