Đây là cú pháp khai báo các phương thức mở rộng, một tính năng mới của C # 3.0.
Phương thức mở rộng là mã phần, "ma thuật" của trình biên dịch phần, trong đó trình biên dịch với sự trợ giúp của intellisense trong Visual Studio làm cho phương thức mở rộng của bạn thực sự có sẵn dưới dạng một phương thức thể hiện trên đối tượng được đề cập.
Để tôi lấy một ví dụ.
Không có phương thức nào trên lớp String được đặt tên là GobbleGobble, vì vậy hãy tạo một phương thức mở rộng:
public static class StringExtensions
{
public static void GobbleGobble(this string s)
{
Console.Out.WriteLine("Gobble Gobble, " + s);
}
}
Tên lớp chỉ là quy ước đặt tên của tôi, không nhất thiết phải đặt tên như vậy, nhưng nó phải tĩnh, cũng như phương thức.
Sau khi khai báo phương thức trên, bạn có thể, trong Visual Studio, nhập vào:
String s = "Turkey Baster!";
s.
sau dấu chấm, hãy đợi intellisense và nhận thấy có một phương thức GobbleGobble ở đó, hãy hoàn thành đoạn mã như sau:
String s = "Turkey Baster!";
s.GobbleGobble();
Quan trọng : Lớp nơi phương thức mở rộng được khai báo phải có sẵn cho trình biên dịch và trình xử lý intellisense để intellisense hiển thị phương thức. Nếu bạn nhập GobbleGobble theo cách thủ công và sử dụng phím tắt Ctrl+ ., nó sẽ không giúp bạn sử dụng đúng các lệnh vào tệp.
Lưu ý rằng tham số của phương thức đã biến mất. Trình biên dịch sẽ âm thầm di chuyển xung quanh các bit quan trọng, đó là:
String s = "Turkey Baster!";
s.GobbleGobble();
^ ^
| +-- the compiler will find this in the StringExtensions class
|
+-- will be used as the first parameter to the method
Do đó, đoạn mã trên sẽ được trình biên dịch chuyển đổi thành:
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
Vì vậy, tại thời điểm gọi, không có gì kỳ diệu về nó, nó chỉ là một cuộc gọi đến một phương thức tĩnh.
Lưu ý rằng nếu phương thức mở rộng của bạn khai báo nhiều hơn một tham số, chỉ tham số đầu tiên hỗ trợ công cụ this
sửa đổi và phần còn lại phải được chỉ định như một phần của lệnh gọi phương thức như bình thường:
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
Các phương thức mở rộng đã được thêm vào một phần do Linq, trong đó cú pháp Linq của C # sẽ tìm kiếm các phương thức mở rộng được đặt tên thích hợp cho các đối tượng đang chơi, có nghĩa là bạn có thể "giới thiệu" Linq-support vào bất kỳ loại lớp nào bằng cách khai báo đúng phần mở rộng các phương pháp. Tất nhiên, hỗ trợ Linq đầy đủ là rất nhiều công việc, nhưng nó hoàn toàn có thể.
Ngoài ra, các phương pháp mở rộng thực sự hữu ích, vì vậy hãy đọc nó.
Đây là một số liên kết: