The first parameter of an extension method is always the target type,  dịch - The first parameter of an extension method is always the target type,  Việt làm thế nào để nói

The first parameter of an extension

The first parameter of an extension method is always the target type, which is the string class in this example. Therefore, this example effectively defines a Right() function for the string class. You want to be able to call this method on any string, just like calling a normal System.String member method:
aString.Right(n) In C#, an extension method must be defined as a static method in a static class. Therefore, this example defines a static class, ExtensionMethods, and a static method in this class:
public static string Right(this string s, int n) { if (n < 0 || n > s.Length)
return s; else return s.Substring(s.Length - n); } Compared to a regular method, the only notable difference is that the first parameter of an extension method always consists of the this keyword, followed by the target type, and finally an instance of the target type:
this string s The subsequent parameters are just normal parameters of the extension method. The method body has no special treatment compared to regular methods either. Here, this function simply returns the desired substring or, if the length argument n is invalid, the original string. To use an extension method, it must be in the same scope as the client code. If the extension method is defined in another namespace, you should add a “using” directive to import the namespace where the extension method is defined. You can’t use fully qualified extension method names as you do with a normal method. The use of extension methods is otherwise identical to any built-in methods of the target type. In this example, you simply call it like a regular System.String method:
hello.Right(3)
Extension Method Restrictions It is worth mentioning, however, that extension methods are somewhat more restrictive than regular member methods—extension methods can only access public members of target types. This prevents the breach of encapsulation of the target types. Another restriction is that if an extension method conflicts with a member method in the target class, the member method is always used instead of the extension method, as you can see in Example 13-7.
Example 13-7. Conflicting extension methods
using System;
namespace Programming_CSharp_Extensions { // Container class for extension methods. public static class ExtensionMethods { // Returns a substring between the specific // start and end index of a string. public static string Substring(this string s, int startIndex, int endIndex) { if (startIndex >= 0 && startIndex customer.FirstName == "Donna"); This method takes a predicate as an input argument.
In C# and LINQ, a predicate is a delegate that examines certain conditions and returns a Boolean value indicating whether the conditions are met.
The predicate performs a filtering operation on queries. The argument to this method is quite different from a normal method argument. In fact, it’s a lambda expression, which I introduced in Chapter 12.
Lambda Expressions in LINQ In Chapter 12, I mentioned that you can use lambda expressions to define inline delegate definitions. In the following expression:
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
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..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Tham số đầu tiên của một phương pháp khuyến nông luôn là các loại mục tiêu, đó là lớp chuỗi trong ví dụ này. Vì vậy, ví dụ này có hiệu quả định nghĩa một hàm Right () cho các lớp chuỗi. 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 một phương thức thành viên System.String bình thường:
aString.Right (n) Trong C #, một phương pháp khuyến nông phải được định nghĩa như là một phương pháp tĩnh trong một lớp tĩnh. Vì vậy, ví dụ này định nghĩa một lớp tĩnh, ExtensionMethods, và một phương pháp tĩnh trong lớp này:
công static string Right (chuỗi này s, int n) {if (n <0 || n> s.Length)
trở lại s; khác trở 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ú ý duy nhất là tham số đầu tiên của một phương pháp khuyến nông luôn luôn bao gồm các từ khóa này, tiếp theo 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:
chuỗi này s Các thông số tiếp theo chỉ thông số bình thường của các phương pháp khuyến nông. Cơ thể có phương pháp không có điều trị đặc biệt so với phương pháp thông thường hoặc. Ở đây, chức năng này chỉ đơn giản là trả về chuỗi con mong muốn hoặc, nếu đối số chiều dài n là không hợp lệ, chuỗi gốc. Để sử dụng một phương pháp mở rộng, nó phải nằm 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 "sử dụng" chỉ thị để nhập không gian tên nơi mà phương pháp mở rộng được xác định. Bạn không thể sử dụng tên phương pháp khuyến nông có đủ điều kiệ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 khuyến nông là nếu không giống với bất kỳ phương pháp tích hợp của các loại mục tiêu. Trong ví dụ này, bạn chỉ cần gọi nó như một phương pháp System.String thường xuyên:
hello.Right (3)
Phương pháp mở rộng hạn chế Điều đáng nói, tuy nhiên, phương pháp khuyến nông có phần hạn chế hơn các phương pháp thành viên phương pháp gia hạn thông thường chỉ có thể truy cập công cộng các thành viên của các loại mục tiêu. Điều này ngăn cản các vi phạm về đóng gói của các loại mục tiêu. Hạn chế khác là 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 trong lớp mục tiêu, phương pháp thành viên luôn được sử dụng thay cho phương pháp mở rộng, bạn có thể thấy trong ví dụ 13-7.
Ví dụ 13-7. Phương pháp mở rộng mâu thuẫn
using System;
Programming_CSharp_Extensions namespace {// lớp container cho phương pháp mở rộng. ExtensionMethods public class tĩnh {// Trả về một chuỗi con giữa cụ thể // bắt đầu và chỉ số cuối của một chuỗi. public static string xâu (string s này, int startIndex, int endIndex) {if (startIndex> = 0 && startIndex <= endIndex && endIndex <s.Length) trở s.Substring (startIndex, endIndex - startIndex);
Ví dụ 13-7 . Phương pháp mở rộng đối nghịch nhau (tiếp theo)
khác trở lại s; }}
Public class Tester {public static void Main () {string hello = "Hello"; Console.WriteLine ( "hello.Substring (2, 3) = {0}", hello.Substring (2, 3)); }}}
Output: hello.Substring (2, 3) = llo
Các phương pháp khuyến nông xâu () 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 length). Như bạn có thể thấy từ kết quả, đó là việc xây dựng trong xâu () phương pháp được thực hiện trong ví dụ này. Bây giờ, chúng ta sẽ quay 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 kiếm một danh sách khách hàng:
IEnumerablekết quả = customers.Where (khách hàng => customer.FirstName == "Donna"); Phương pháp này có một vị như một tham số đầu vào.
Trong C # và LINQ, một vị là một đại biểu mà kiểm tra các điều kiện nhất định và trả về một giá trị logic Boolean cho biết các điều kiện được đáp ứng.
Các vị thực hiện một hoạt động lọc trên các truy vấn. Các đối số cho phương pháp này là khá khác nhau từ một đối phương pháp thông thường. Trong thực tế, đó là một biểu thức lambda, mà tôi giới thiệu trong chương 12.
Lambda Expressions trong LINQ Trong Chương 12, tôi nói rằng bạn có thể sử dụng các biểu thức lambda để xác định định nghĩa đại biểu inline. Trong biểu thức sau đây:
đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2025 I Love Translation. All reserved.

E-mail: