Các tham số đầu tiên của một phương pháp mở rộng luôn là loại mục tiêu, là lớp string trong ví dụ này. Vì vậy, ví dụ này có hiệu quả định nghĩa hàm Right() cho lớp string. Bạn muốn có thể gọi phương pháp này trên bất kỳ chuỗi, giống như gọi điện thoại một phương pháp System.String thành viên bình thường:aString.Right(n) trong C#, một phương pháp mở rộng phải được xác định như là một phương pháp tĩnh trong một lớp học tĩnh. Vì vậy, ví dụ này định nghĩa một lớp học tĩnh, ExtensionMethods và một phương pháp tĩnh trong lớp này:khu vực tĩnh chuỗi ngay (này chuỗi s, int n) {nếu (n < 0 || n > s.Length) trả lại s; khác trở lại s.Substring (s.Length - n); } So với một phương pháp thông thường, sự khác biệt đáng chú ý chỉ là tham số đầu tiên của một phương pháp mở rộng luôn luôn bao gồm các điều này từ khóa, theo sau là các loại mục tiêu, và cuối cùng là một thể hiện của các loại mục tiêu:này s chuỗi các thông số tiếp theo là các tham số chỉ bình thường của các phương pháp mở rộng. Cơ thể của phương pháp có không có điều trị đặc biệt so với phương pháp thông thường hoặc là. Ở đây, chức năng này chỉ đơn giản là trả về chuỗi con mong muốn, hoặc, nếu n đối số chiều dài là không hợp lệ, các chuỗi gốc. Để sử dụng một phương pháp mở rộng, nó phải trong phạm vi tương tự như mã khách hàng. Nếu phương pháp mở rộng được định nghĩa trong không gian tên khác, bạn nên thêm một chỉ thị "bằng cách sử dụng" để nhập các không gian tên nơi phương pháp mở rộng được định nghĩa. Bạn không thể sử dụng đầy đủ các tiện ích mở rộng phương pháp tên như bạn làm với một phương pháp thông thường. Việc sử dụng các phương pháp mở rộng nếu không là giống hệt nhau để các phương pháp được xây dựng trong bất kỳ loại mục tiêu. Trong ví dụ này, bạn chỉ cần gọi nó giống như một phương pháp System.String thường xuyên:Xin chào. Right(3)Mở rộng phương pháp hạn chế nó là đáng nói đến, Tuy nhiên, phương pháp mở rộng phần nào hạn chế hơn so với các thành viên thường xuyên các phương pháp-phương pháp mở rộng chỉ có thể truy cập các thành viên khu vực mục tiêu loại. Điều này ngăn chặn các vi phạm về đóng gói các loại mục tiêu. Hạn chế khác là rằng nếu một phương pháp mở rộng xung đột với một phương pháp thành viên thuộc các lớp mục tiêu, phương pháp của thành viên luôn luôn được sử dụng thay vì phương pháp mở rộng, như bạn có thể thấy trong ví dụ 13-7.Ví dụ 13-7. Phương pháp mở rộng xung độtsử dụng hệ thống;không gian tên Programming_CSharp_Extensions {/ / Container lớp học cho các phần mở rộng phương pháp. khu vực tĩnh lớp ExtensionMethods {/ / trả về một xâu con giữa cụ thể / / bắt đầu và kết thúc các chỉ số của một chuỗi công tĩnh string xâu (này chuỗi s, int startIndex, int endIndex) {nếu (startIndex > = 0 & & startIndex < = endIndex & & endIndex < s.Length) trở lại s.Substring (startIndex, endIndex - startIndex); Ví dụ 13-7. Phương pháp mở rộng xung đột (tiếp theo) khác trả lại s; } } công cộng lớp Tester {công tĩnh void Main() {chuỗi chào = "Xin chào"; Console.WriteLine ("Xin chào. Xâu (2, 3) = {0} ", xin chào. Xâu (2, 3)); } } }Đầu ra: Xin chào. Xâu (2, 3) = lloPhương pháp mở rộng Substring() trong ví dụ này có chính xác cùng một chữ ký là phương pháp được xây dựng trong String.Substring (int startIndex, int chiều dài). Như bạn có thể nhìn thấy từ đầu ra, đó là các phương pháp được xây dựng trong Substring() được thực hiện trong ví dụ này. Bây giờ, chúng tôi sẽ trở lại ví dụ 13-4, nơi mà chúng tôi sử dụng phương pháp mở rộng LINQ, ở đâu, để tìm một danh sách khách hàng:IEnumerable kết quả = khách. Nơi (khách hàng = > khách hàng. FirstName == "Donna"); Phương pháp này có một vị ngữ như là đối số đầu vào.Trong C# và LINQ, một vị ngữ là một đại biểu đó kiểm tra điều kiện nhất định và trả về một giá trị Boolean chỉ ra cho dù các điều kiện được đáp ứng.Vị ngữ là thực hiện một hoạt động lọc trên các truy vấn. Đối số cho phương pháp này là khá khác nhau từ một đối số phương pháp thông thường. Trong thực tế, nó là một biểu hiện lambda, tôi giới thiệu trong chương 12.Lambda các biểu thức trong LINQ trong chương 12, tôi đã đề cập rằng bạn có thể sử dụng biểu thức lambda để xác định nội tuyến đại biểu định nghĩa. Trong biểu thức sau đây:
đang được dịch, vui lòng đợi..
