Delegate

     

Dẫn nhập

Ở bài học trước, chúng ta đã thuộc nhau mày mò về ILIST vào C#. Hôm nay chúng ta vẫn cùng tò mò về Delegate vào C#.

Bạn đang xem: Delegate

Nội dung

Để hiểu hiểu bài này xuất sắc nhất chúng ta nên có kỹ năng cơ bạn dạng về những phần:

Trong bài học kinh nghiệm này, họ sẽ cùng mày mò các vấn đề:

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

Delegate là gì?

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

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

Tham chiếu của Delegate rất có thể thay đổi runtime(khi chương trình đang thực thi).

Delegate thường được dùng làm triển khai các phương thức hoặc sự kiện call-back.

Bạn cứ đọc Delegate là một biến đổi bình thường, phát triển thành này đựng hàm mà bạn phải gọi. Sau này lấy ra sài như hàm bình thường. Cực hiếm của biến hóa Delegate hôm nay là tham chiếu đến hàm. Tất cả thể chuyển đổi runtime khi lịch trình đang chạy.

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

Khai báo Delegate vào C#

Khai báo Delegate trong C# sẽ giống như như khai báo một biến. Nhưng yêu cầu thêm tự khóa Delegate để xác định đó là một Delegate. Đồng thời vày Delegate là nhằm tham chiếu cho một hàm, nên cũng cần khai báo kèm kiểu dữ liệu trả về của cùng tham số đầu vào của Delegate khớp ứng với hàm tham chiếu.

Công thức:

delegate kiểu trả về> tên delegate> (danh sách tha số trường hợp có>);

Ví dụ:

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

Lúc này bọn họ đã chế tạo một Delegate có tên là MyDelegate. MyDelegatecó dạng hình trả về là int, một tham số đầu vào là string.

MyDelegatelúc này hoàn toàn có thể dùng làm cho kiểu dữ liệu cho rất nhiều Delegate tới hàm khớp ứng kiểu trả về và tham số đầu vào.

Khởi sản xuất và sử dụng Delegate vào C#

Khi hình trạng Delegateđược khai báo, đối tượng Delegatephải được tạo nên với từ bỏ khóa new với được tham chiếu đến một cách thức cụ thể. Cách làm này đề xuất cùng hình trạng trả về với tham số đầu vào với Delegateđã tạo.

Khi chế tạo ra một Delegate, thông số được truyền với biểu thức new được viết tương tự như như một lời hotline phương thức, dẫu vậy không gồm tham số tới cách thức đó. Có nghĩa là chỉ truyền tên hàm vào thôi. Delegatesẽ tự đánh giá và nhận định hàm được gửi vào bao gồm cùng kiểu tài liệu trả ra và thuộc tham số đầu 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ị sẽ convert thành int: " + valueConverted); Console.ReadLine(); static int ConvertStringToInt(string stringValue) int valueInt = 0; Int32.TryParse(stringValue, out valueInt);Console.WriteLine("Đã nghiền kiểu tài liệu thành công"); return valueInt; Kết quả chạy chương trình:

*

Để các bạn hiểu rõ rộng về đoạn code bên trên thì bản thân sẽ giải thích một chút:

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

Nhận thấy DelegateconvertToInt mình sử dụng tương tự như như một hàm bình thường.

Xem thêm: Lens L Là Gì ? Giải Nghĩa Ký Hiệu Ống Kính Canon

Do MyDelegateđã khởi tạo nhất quán kiểu dữ liệu trả về cùng tham số nguồn vào với hàm ConvertStringToInt đề nghị convertToInt mới thỏa mãn nhu cầu điều khiếu nại khởi chế tạo ra và thực hiện của hàm ConvertStringToInt này.

Vậy Delegatebản chất chỉ là một trong biến sửa chữa cho hàm, biến đổi này tham chiếu mang lại hàm nó muốn tham chiếu để thay thế khi dùng. Bí quyết dùng y như điện thoại tư vấn một hàm.

Vì sao yêu cầu Delegate? khi bạn cần sử dụng một hàm như một biến ví dụ như tham số truyền vào của một hàm, hàm call-back, event…

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

Khi bạn cần thực hiện nay một chuỗi hàm với cùng kiểu trả về và thuộc tham số nguồn vào mà không thích gọi những hàm tuần từ (chỉ hotline 1 hàm 1 lần duy nhất). Dịp này các bạn sẽ cần dùng đến Multicast Delegate.

Bản chất chúng ta cũng có thể làm một chuỗi Delegatecùng hình dáng Delegatebằng biện pháp dùng toán tử +. Hôm nay khi các bạn gọi Delegatesẽ thực hiện tuần từ các Delegateđược cộng vào với nhau.

Bạn hoàn toàn có thể loại vứt 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ị đang convert thành int: " + valueConverted); Console.WriteLine("Kết quả khi hotline multicast Delegate"); multicast(numberSTR); Console.ReadLine(); static int ConvertStringToInt(string stringValue) int valueInt = 0; Int32.TryParse(stringValue, out valueInt); Console.WriteLine("Đã xay kiểu dữ liệu thành công"); return valueInt; static int ShowString(string stringValue) Console.WriteLine(stringValue); return 0; Kết quả: khi 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 cùng 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 chế tác thêm 2 Delegatelà showString tham chiếu cho tới hàm ShowString cùng multicast là hiệu quả cộng của 2 DelegateconvertToInt và showString .

Mình gọi Delegatemulticast để tiến hành 1 lần 2 Delegatetuần trường đoản cú là convertToInt với showString.

Console.WriteLine("Kết quả khi điện thoại tư vấn multicast Delegate");multicast(numberSTR);Khi cần sa thải Delegatetrong multicast bạn chỉ việc trừ Delegatera

multicast = multicast - showString;

Dùng Delegate mang đến call-back function

Như mình đã nói làm việc trên,Delegatecũng là một trong những biến. Vậy yêu cầu mình rất có thể truyền Delegatevào hàm làm parameter như đổi mới bình thường. Lúc này Delegatenày sẽ tiến hành gọi là call-back function. Mục đích của việc này là hàm dấn call-back function là param có thể gọi Delegateđược chuyển vào khi nào cần như lấy ví dụ như 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 chương trình:

*

Như bạn thấy, mình đã sử dụng Delegatelàm call-back function thành công.

Ý nghĩa của lấy một ví dụ là mỗi khi người dùng nhập vào tên của bản thân thì sẽ điện thoại tư vấn DelegateShowString nhằm hiển thị tên người tiêu dùng vừa nhập vào ra screen console. Vậy lúc này hàm ShowString này trả toàn rất có thể được có mang do người dùng mà không 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 nắm được:

Delegate là gì?Khai báo Delegate vào C#Khởi sinh sản 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ư 1 call-back function

Bài học tập sau bọn họ sẽ cùng mày mò về sự kiện TRONG C#.

Cảm ơn các bạn đã theo dõi bài viết. Hãy nhằm lại phản hồi hoặc góp ý của chính mình để phạt triển nội dung bài viết tốt hơn. Đừng quên “Luyện tập – thử thách – không lo khó”.

Xem thêm: Cách Cài Win 11 Không Mất Dữ Liệu, Cách Nâng Cấp Windows 11 Không Mất Dữ Liệu

Thảo luận

Nếu chúng ta có ngẫu nhiên khó khăn hay vướng mắc gì về khóa học, đừng e dè đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện putago.vn.com để nhận thấy sự cung cấp từ cùng đồng.