Đây là cú pháp để khai báo phương pháp mở rộng, tính năng mới của C# 3.0.
Một phương pháp mở rộng là một phần, phần biên dịch "ma thuật", nơi trình biên dịch với sự trợ giúp của intellisense trong Visual Studio làm cho nó xuất hiện rằng phương pháp mở rộng của bạn thực sự có sẵn như là một phương pháp dụ trên đối tượng trong câu hỏi.
Hãy để tôi đưa ra một ví dụ.
Không có phương pháp trên lớp String có tên GobbleGobble, vì vậy chúng ta hãy tạo ra một phương pháp khuyến nô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, nó không phải là cần thiết để đặt tên cho nó như vậy, nhưng nó phải là tĩnh, cũng như phương pháp.
Sau khi tuyên bố các phương pháp trên, bạn có thể, trong Visual Studio, gõ này:
String s = "Turkey Baster!";
s.
sau dấu chấm, chờ IntelliSense, và nhận thấy có một phương pháp GobbleGobble có, hãy điền mã như thế này:
String s = "Turkey Baster!";
s.GobbleGobble();
quan trọng: lớp nơi phương pháp khuyến nông được khai báo phải có sẵn để trình biên dịch và bộ xử lý IntelliSense để cho IntelliSense để hiển thị phương pháp. Nếu bạn nhập GobbleGobble theo cách thủ công và sử dụng Ctrl + . phím tắt, nó sẽ không giúp bạn có được quyền sử dụng chỉ thị vào tập tin.
Lưu ý rằng tham số cho phương pháp đã 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 đó, các mã trên sẽ được biến đổi bởi trình biên dịch như sau:
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
Vì vậy, tại cuộc gọi theo thời gian, không có gì huyền diệu về nó, nó chỉ là một cuộc gọi đến một phương pháp tĩnh.
Lưu ý rằng nếu phương pháp khuyến nông của mình tuyên bố nhiều hơn một tham số, chỉ là người đầu tiên ủng hộ sửa đổi this
, và phần còn lại phải được xác định như là một phần của cuộc gọi phương pháp như bình thường:
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
phương pháp mở rộng là được thêm 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, nghĩa là bạn có thể "giới thiệu" hỗ trợ LINQ vào bất kỳ loại lớp nào bằng cách khai báo đúng phương thức mở rộng. Tất nhiên, hỗ trợ đầy đủ LINQ là rất nhiều công việc, nhưng nó là có thể.
Ngoài ra, các phương pháp mở rộng của chính chúng thực sự hữu ích, do đó hãy đọc nó.
Dưới đây là một số liên kết:
Thưa bạn, bạn không nên trả lời dù sao, bạn nên làm cho tôi một trình chỉnh sửa biểu đồ mới tốt đẹp! :) (oh, và cảm ơn bạn vì lời khen ngợi loại sir!) –
Tôi chắc chắn sẽ bắt đầu sử dụng thuật ngữ "Gobble Gobble Magic". – chris
Youtube đã ngắt liên kết một lần nữa, http://www.youtube.com/watch?v=Bz_heb9Rz2g, vẫn ở @ 1: 00 trở đi. –