DELEGATES LÀ GÌ

Dẫn nhập

Tại bài học trước, chúng ta vẫn cùng nhau mày mò về ILIST TRONG C#. Hôm ni bọn họ đã thuộc tìm hiểu về Delegate trong C#.

Bạn đang xem: Delegates là gì

Nội dung

Để đọc hiểu bài này tốt nhất các bạn yêu cầu có kiến thức cơ phiên bản về những phần:

Trong bài học này, chúng ta đang thuộc tìm hiểu các vấn đề:

Delegate là gì?Knhì báo Delegate trong C#Khởi chế tạo ra Delegate trong C#Multicast(đa hướng) một Delegate trong C#Cách dùng Delegate trong C#Dùng Delegate như một call-baông chồng function

Delegate là gì?

Delegate trong C# tựa như nlỗi con trỏ hàm vào C hoặc C++.

Delegate là một biến kiểu tđam mê chiếu(references) cất tsay mê chiếu cho tới một phương thức.

Tđam mê chiếu của Delegate rất có thể biến hóa runtime(lúc công tác sẽ thực thi).

Delegate thường xuyên được dùng để xúc tiến những cách làm hoặc sự khiếu nại call-back.

Bạn cứ đọng phát âm Delegate là một trở nên bình thường, biến hóa này chứa hàm nhưng bạn phải gọi. Sau này lấy ra sài nhỏng hàm bình thường. Giá trị của biến Delegate bây giờ là tmê mẩn chiếu đến hàm. cũng có thể biến đổi runtime Lúc lịch trình đang làm việc.

Delegate được dẫn xuất tự lớp System.Delegate vào C#.

Knhì báo Delegate trong C#

Knhì báo Delegate trong C# đã tương tự như nlỗi khai báo một biến đổi. Nhưng buộc phải thêm từ bỏ khóa Delegate nhằm khẳng định đó là một Delegate. Đồng thời vì chưng Delegate là để tđắm đuối chiếu mang lại một hàm, bắt buộc cũng cần phải knhị báo kèm mẫu mã dữ liệu trả về của và tđam mê số nguồn vào của Delegate khớp ứng với hàm tmê say chiếu.

Công thức:

delegate hình dáng trả về> thương hiệu delegate> (danh sách tha số nếu có>);

Ví dụ:

delegate int MyDelegate(string s);Lưu ý: Chữ delegate viết thường

Hiện nay họ đang chế tạo một Delegate có tên là MyDelegate. MyDelegategồm giao diện trả về là int, một tmê say số nguồn vào là string.

MyDelegatetừ bây giờ hoàn toàn có thể dùng làm hình trạng tài liệu mang đến phần nhiều Delegate cho tới hàm tương ứng thứ hạng trả về với tmê mệt số đầu vào.

Khởi chế tác và áp dụng Delegate vào C#

Lúc kiểu dáng Delegateđược khai báo, đối tượng người dùng Delegatecần được sinh sản với trường đoản cú khóa new với được tsi mê chiếu đến một cách tiến hành cụ thể. Phương thức này đề nghị cùng vẻ bên ngoài trả về và tyêu thích số đầu vào cùng với Delegateđã tạo.

Khi chế tạo một Delegate, tđắm đuối số được truyền với biểu thức new được viết tựa như như một lời Điện thoại tư vấn phương thơm thức, nhưng mà không có tmê mẩn số tới cách tiến hành đó. Tức là chỉ truyền tên hàm vào thôi. Delegateđã tự đánh giá và nhận định hàm được đưa vào gồm thuộc thứ hạng dữ liệu trả ra và thuộc tmê mẩn số nguồn vào hay không.

Ví dụ:

class Program delegate int MyDelegate(string s); static void Main(string<> args) Console.OutputEncoding = Encoding.Unicode; MyDelegate convertToInt = new MyDelegate(ConvertStringToInt); string numberSTR = "35"; int valueConverted = convertToInt(numberSTR);Console.WriteLine("Giá trị đã convert thành int: " + valueConverted); Console.ReadLine(); static int ConvertStringToInt(string stringValue) int valueInt = 0; Int32.TryParse(stringValue, out valueInt);Console.WriteLine("Đã nghiền hình dáng tài liệu thành công"); return valueInt; Kết quả chạy chương thơm trình:

*

Để chúng ta nắm rõ rộng về đoạn code bên trên thì bản thân sẽ phân tích và lý giải một chút:

Ở trên đây bản thân sinh sản một hàm ConvertStringToInt có tác dụng trọng trách là gửi phong cách dữ liệu của một số từ bỏ string thanh lịch int.Mình áp dụng Delegatebằng phương pháp chế tạo một biến đổi convertToInt có thứ hạng dữ liệu là MyDelegate. convertToInt này bản thân new MyDelegatevới tsi số nguồn vào là tên hàm ConvertStringToInt(để ý chỉ tên hàm thôi).Mình có biến đổi numberSTR thứ hạng string khởi chế tạo ra giá trị là 35.Mình chế tạo ra một biến chuyển valueConverted kiểu int khởi tạo thành nó bởi kết quả Hotline DelegateconvertToInt cùng với ttê mê số truyền vào Delegatelà đổi mới numberSTR.Kết quả xuất ra màn hình Console là số 35.

Nhận thấy DelegateconvertToInt mình áp dụng tựa như như một hàm thông thường.

Xem thêm: Mô Hình Các Loại Gầu Tải( Bucket Elevator Là Gì, Dịch Nghĩa Của Từ Vertical Bucket Elevator

Do MyDelegateđang khởi chế tác đồng bộ đẳng cấp tài liệu trả về với tsay đắm số đầu vào với hàm ConvertStringToInt đề nghị convertToInt new vừa lòng điều kiện khởi tạo thành cùng sử dụng của hàm ConvertStringToInt này.

Vậy Delegatethực chất chỉ là 1 biến thay thế mang lại hàm, vươn lên là này tham mê chiếu cho hàm nó mong muốn tmê mẩn chiếu để sửa chữa thay thế khi dùng. Cách cần sử dụng y như Call một hàm.

Vì sao nên Delegate? khi chúng ta bắt buộc sử dụng một hàm nhỏng một biến ví dụ như tmê say số truyền vào của một hàm, hàm call-bachồng, event…

Multicast(nhiều hướng) một Delegate vào C#

lúc bạn phải triển khai một chuỗi hàm với cùng kiểu dáng trả về và thuộc tđam mê số nguồn vào nhưng không muốn điện thoại tư vấn các hàm tuần tự (chỉ Hotline 1 hàm 1 lần duy nhất). Lúc bấy giờ bạn sẽ yêu cầu dùng mang lại Multicast Delegate.

Bản chất chúng ta có thể có tác dụng một chuỗi Delegatecùng giao diện Delegatebằng cách cần sử dụng tân oán tử +. Hiện nay khi chúng ta Hotline Delegatevẫn tiến hành tuần tự những Delegateđược cộng vào cùng nhau.

quý khách hàng hoàn toàn có thể thải trừ Delegatetrong multicast bởi toán tử -.

Ví dụ:

class Program delegate int MyDelegate(string s); static void Main(string<> args) Console.OutputEncoding = Encoding.Unicode; MyDelegate convertToInt = new MyDelegate(ConvertStringToInt); MyDelegate showString = new MyDelegate(ShowString); MyDelegate multicast = convertToInt + showString; string numberSTR = "35"; int valueConverted = convertToInt(numberSTR);Console.WriteLine("Giá trị đã convert thành int: " + valueConverted); Console.WriteLine("Kết quả Khi Gọi multicast Delegate"); multicast(numberSTR); Console.ReadLine(); static int ConvertStringToInt(string stringValue) int valueInt = 0; Int32.TryParse(stringValue, out valueInt); Console.WriteLine("Đã nghiền vẻ bên ngoài dữ liệu thành công"); return valueInt; static int ShowString(string stringValue) Console.WriteLine(stringValue); return 0; Kết quả: lúc chạy chương trình

*

Dùng lại ví dụ của phần trước.

Mình tạo thêm hàm ShowString với mục dích là xuất ra màn hình hiển thị Console chuỗi truyền vào. Mình tạo thêm 2 Delegatelà showString tsay mê chiếu cho tới hàm ShowString và multicast là kết quả cộng của 2 DelegateconvertToInt cùng showString .

Mình hotline Delegatemulticast nhằm triển khai 1 lần 2 Delegatetuần trường đoản cú là convertToInt và showString.

Console.WriteLine("Kết trái lúc hotline multicast Delegate");multicast(numberSTR);Lúc nên thải trừ Delegatevào multicast chúng ta chỉ bài toán trừ Delegatera

multicast = multicast - showString;

Dùng Delegate cho call-bachồng function

Như mình đã nói trên,Delegatecũng là 1 trong biến chuyển. Vậy đề nghị bản thân hoàn toàn có thể truyền Delegatevào hàm làm cho parameter như thay đổi thông thường. Lúc bấy giờ Delegatenày sẽ được hotline là call-bachồng function. Mục đích của việc này là hàm dấn call-baông chồng function là param có thể hotline Delegateđược gửi vào lúc nào đề nghị như ví dụ sau:

delegate int MyDelegate(string s); static void Main(string<> args) Console.OutputEncoding = Encoding.Unicode; MyDelegate showString = new MyDelegate(ShowString); NhapVaShowTen(showString);Console.ReadLine(); static void NhapVaShowTen(MyDelegate showTen) Console.WriteLine("Mời nhập thương hiệu của bạn:"); string ten = Console.ReadLine(); showTen(ten); static int ShowString(string stringValue) Console.WriteLine(stringValue); return 0; Kết quả: Khi chạy cmùi hương trình:

*

Nlỗi bạn thấy, tôi đã thực hiện Delegatecó tác dụng call-baông xã function thành công xuất sắc.

Ý nghĩa của ví dụ là mọi khi người tiêu dùng nhtràn lên thương hiệu của chính mình thì vẫn điện thoại tư vấn DelegateShowString để hiển thị tên người tiêu dùng vừa nhập vào ra màn hình hiển thị console. Vậy lúc này hàm ShowString này hoàn toàn rất có thể được khái niệm do người dùng cơ mà ko yêu cầu can thiệp vào code của hàm NhapVaShowTen.

Kết luận

Nội dung bài xích này giúp chúng ta thay được:

Delegate là gì?Knhị báo Delegate trong C#Khởi chế tạo Delegate trong C#Multicast(đa hướng) một Delegate trong C#Cách cần sử dụng Delegate trong C#Dùng Delegate nhỏng một call-bachồng function

Bài học sau họ đã cùng tò mò về EVENT TRONG C#.

Cảm ơn chúng ta vẫn theo dõi nội dung bài viết. Hãy giữ lại comment hoặc góp ý của mình để cải cách và phát triển bài viết xuất sắc hơn. Đừng quên “Luyện tập – Thử thách – Không không tự tin khó”.

Thảo luận

Nếu chúng ta gồm bất kỳ trở ngại xuất xắc vướng mắc gì về khóa đào tạo và huấn luyện, đừng ngần ngại đặt thắc mắc trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI và ĐÁPhường trên thỏng viện nhlhockeyshopuk.com.com nhằm cảm nhận sự hỗ trợ tự xã hội.