DELEGATE LÀ GÌ

Dẫn nhập

Ở bài học trước, chúng ta đang cùng nhau tò mò về ILIST TRONG C#. Hôm ni chúng ta đã cùng khám phá về Delegate trong C#.

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

Nội dung

Để đọc hiểu bài bác này rất tốt chúng ta bắt buộc gồm kiến thức cơ bạn dạng về các phần:

Trong bài học kinh nghiệm này, họ đang cùng tò mò những vấn đề:

Delegate là gì?Knhì báo Delegate vào C#Khởi tạo thành Delegate vào C#Multicast(nhiều hướng) một Delegate vào C#Cách dùng Delegate vào C#Dùng Delegate như một call-bachồng function

Delegate là gì?

Delegate trong C# tương tự nlỗi con trỏ hàm trong C hoặc C++.

Delegate là một trở nên loại tyêu thích chiếu(references) cất tmê mệt chiếu 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 chương trình sẽ thực thi).

Delegate thường xuyên được dùng làm triển khai các cách tiến hành hoặc sự kiện call-back.

Bạn cđọng đọc Delegate là một thay đổi bình thường, biến đổi này chứa hàm mà bạn phải Gọi. Sau này lấy ra sử dụng như hàm thông thường. Giá trị của phát triển thành Delegate lúc này là tsi chiếu mang đến hàm. cũng có thể thay đổi runtime Lúc chương trình đang chạy.

Delegate được dẫn xuất trường đoản cú lớp System.Delegate vào C#.

Knhị báo Delegate trong C#

Knhì báo Delegate trong C# đã tương tự như nhỏng knhì báo một đổi thay. Nhưng yêu cầu thêm từ bỏ khóa Delegate nhằm xác định đây là một Delegate. Đồng thời vị Delegate là để tsay đắm chiếu cho một hàm, cần cũng cần knhì báo kèm dạng hình tài liệu trả về của và tsay đắm số nguồn vào của Delegate khớp ứng cùng với hàm tmê mệt chiếu.

Công thức:

delegate loại trả về> tên delegate> (danh sách tha số ví như có>);

Ví dụ:

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

Hiện nay họ đang tạo nên một Delegate có tên là MyDelegate. MyDelegatetất cả kiểu dáng trả về là int, một tđê mê số đầu vào là string.

MyDelegatetừ bây giờ có thể cần sử dụng có tác dụng thứ hạng tài liệu mang đến hầu hết Delegate tới hàm khớp ứng thứ hạng trả về với tsay đắm số đầu vào.

Khởi chế tạo ra và sử dụng Delegate vào C#

lúc thứ hạng Delegateđược knhị báo, đối tượng người sử dụng Delegateyêu cầu được sản xuất cùng với từ bỏ khóa new cùng được tsi chiếu cho một cách tiến hành cố gắng thể. Phương thơm thức này cần thuộc dạng hình trả về và tham mê số đầu vào với Delegateđã chế tạo.

khi tạo thành một Delegate, tmê man số được truyền với biểu thức new được viết giống như như một lời Call phương thức, tuy nhiên không có tsi mê số cho tới phương thức đó. Tức là chỉ truyền thương hiệu hàm vào thôi. Delegatesẽ từ nhận định hàm được chuyển vào gồm cùng mẫu mã dữ liệu trả ra với cùng tđắm đuối số nguồn vào hay là 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ị vẫn convert thành int: " + valueConverted); Console.ReadLine(); static int ConvertStringToInt(string stringValue) int valueInt = 0; Int32.TryParse(stringValue, out valueInt);Console.WriteLine("Đã ép phong cách dữ liệu thành công"); return valueInt; Kết trái chạy chương trình:

*

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

Tại đây mình tạo nên một hàm ConvertStringToInt làm cho trách nhiệm là đưa dạng hình dữ liệu của một số từ string quý phái int.Mình áp dụng Delegatebằng phương pháp tạo ra một biến chuyển convertToInt tất cả thứ hạng dữ liệu là MyDelegate. convertToInt này bản thân new MyDelegatecùng với tsi số đầu vào là tên hàm ConvertStringToInt(chú ý chỉ thương hiệu hàm thôi).Mình có thay đổi numberSTR thứ hạng string khởi tạo giá trị là 35.Mình sinh sản một biến đổi valueConverted vẻ bên ngoài int khởi tạo ra nó bởi công dụng Hotline DelegateconvertToInt với tmê mẩn số truyền vào Delegatelà phát triển thành numberSTR.Kết trái xuất ra screen Console là số 35.

Nhận thấy DelegateconvertToInt bản thân sử dụng tương tự như nlỗi một hàm thông thường.

Xem thêm: Download Game Chiến Tranh Thế Giới, Chiến Tranh Thế Giới

Do MyDelegateđã khởi tạo đồng điệu hình dáng tài liệu trả về với tyêu thích số đầu vào cùng với hàm ConvertStringToInt yêu cầu convertToInt new vừa lòng ĐK khởi tạo ra với áp dụng của hàm ConvertStringToInt này.

Vậy Delegatethực chất chỉ là 1 trong những đổi thay sửa chữa cho hàm, thay đổi này tyêu thích chiếu mang đến hàm nó mong muốn tmê mệt chiếu để thay thế khi sử dụng. Cách sử dụng giống hệt như điện thoại tư vấn một hàm.

Vì sao phải Delegate? Lúc bạn đề xuất cần sử dụng một hàm nlỗi một biến ví như tđắm say số truyền vào của một hàm, hàm call-baông chồng, event…

Multicast(đa hướng) một Delegate trong C#

lúc bạn cần triển khai một chuỗi hàm cùng với cùng loại trả về với thuộc ttê mê số đầu vào mà không thích Call các hàm tuần từ (chỉ Gọi 1 hàm 1 lần duy nhất). Lúc bấy giờ bạn sẽ nên cần sử dụng đến Multicast Delegate.

Bản chất chúng ta có thể có tác dụng một chuỗi Delegatethuộc loại Delegatebằng cách dùng toán tử +. Lúc bấy giờ khi chúng ta call Delegateđang tiến hành tuần từ các Delegateđược cùng vào cùng nhau.

Bạn có thể vứt bỏ Delegatetrong multicast bằng tân oá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ị vẫn convert thành int: " + valueConverted); Console.WriteLine("Kết trái lúc call multicast Delegate"); multicast(numberSTR); Console.ReadLine(); static int ConvertStringToInt(string stringValue) int valueInt = 0; Int32.TryParse(stringValue, out valueInt); Console.WriteLine("Đã ép đẳng cấp tài 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 thơm trình

*

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

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

Mình Điện thoại tư vấn Delegatemulticast để thực hiện 1 lần 2 Delegatetuần từ là convertToInt với showString.

Console.WriteLine("Kết trái Khi Hotline multicast Delegate");multicast(numberSTR);khi phải vứt bỏ Delegatevào multicast chúng ta chỉ câu hỏi trừ Delegatera

multicast = multicast - showString;

Dùng Delegate cho call-baông chồng function

Như mình đã nhắc tới ở bên trên,Delegatecũng là 1 trở thành. Vậy yêu cầu bản thân rất có thể truyền Delegatevào hàm có tác dụng parameter như trở nên thông thường. Hiện nay Delegatenày sẽ tiến hành Gọi là call-bachồng function. Mục đích của bài toán này là hàm dìm call-baông chồng function là param rất có thể điện thoại tư vấn Delegateđược đưa vào khi nào yêu cầu nhỏng 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ả: Lúc chạy cmùi hương trình:

*

Nlỗi chúng ta thấy, tôi đã áp dụng Delegatelàm cho call-baông xã function thành công xuất sắc.

Ý nghĩa của ví dụ là mỗi lúc người tiêu dùng nhập vào tên của mình thì đang Hotline DelegateShowString nhằm hiển thị tên người dùng vừa nhập vào ra screen console. Vậy hôm nay hàm ShowString này trọn vẹn hoàn toàn có thể được khái niệm bởi vì người dùng nhưng không đề xuất can thiệp vào code của hàm NhapVaShowTen.

Kết luận

Nội dung bài bác này giúp các bạn gắng được:

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

Bài học sau họ sẽ thuộc tìm hiểu về EVENT TRONG C#.

Cảm ơn chúng ta đã theo dõi và quan sát bài viết. Hãy giữ lại comment hoặc góp ý của mình nhằm trở nên tân tiến bài viết xuất sắc rộng. Đừng quên “Luyện tập – Thử thách – Không ngại ngùng khó”.

Thảo luận

Nếu bạn tất cả bất kỳ trở ngại hay thắc mắc gì về khóa học, chớ ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc vào mục HỎI & ĐÁPhường bên trên thỏng viện vsao.club.com để nhận ra sự cung cấp trường đoản cú cộng đồng.