Dẫn nhập

Ở bài học trước, chúng ta đã thuộc nhau mày mò về ILIST trong C#. Từ bây giờ chúng ta đã cùng tò mò về Delegate trong C#.

Bạn đang xem: Delegate trong c#

Nội dung

Để gọi hiểu bài xích này xuất sắc nhất các bạn nên có kiến thức và kỹ năng cơ bản về các phần:

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

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

Delegate là gì?

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

Delegate là một phát triển thành kiểu tham chiếu(references) đựng tham chiếu tới một phương thức.

Tham chiếu của Delegate hoàn toàn có thể thay thay đổi runtime(khi lịch trình đang thực thi).

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

Bạn cứ hiểu Delegate là một biến đổi bình thường, biến này cất hàm mà bạn cần gọi. Sau này lấy ra sài như hàm bình thường. Quý hiếm của trở nên Delegate hôm nay là tham chiếu mang lại hàm. Bao gồm thể đổi khác runtime khi chương trình đang chạy.

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

Khai báo Delegate trong C#

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

Công thức:

delegate kiểu trả về> thương hiệu delegate> (danh sách tha số giả dụ có>);

Ví dụ:

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

Lúc này chúng ta đã tạo ra một Delegate mang tên là MyDelegate. MyDelegatecó đẳng cấp trả về là int, một tham số đầu vào là string.

MyDelegatelúc này rất có thể dùng có tác dụng kiểu tài liệu cho phần đa Delegate tới hàm tương ứng kiểu trả về và tham số đầu vào.

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

Khi hình dạng Delegateđược khai báo, đối tượng Delegatephải được tạo với tự khóa new cùng được tham chiếu cho một thủ tục cụ thể. Cách thức này đề nghị cùng loại trả về cùng tham số đầu vào cùng với Delegateđã tạo.

Khi 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, tuy thế không bao gồm tham số tới cách thức đó. Tức 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 gồm cùng kiểu tài liệu trả ra và thuộc tham 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("Đã ép kiểu tài liệu thành công"); return valueInt; Kết trái chạy chương trình:

*

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

Ở đây mình tạo ra một hàm ConvertStringToInt làm nhiệm vụ là đưa kiểu tài liệu của một trong những từ string sang trọng int.Mình áp dụng Delegatebằng biện pháp tạo một vươn lên là convertToInt bao gồm 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ỉ thương hiệu hàm thôi).Mình gồm biến numberSTR vẻ bên ngoài string khởi tạo giá trị là 35.Mình chế tạo một biến chuyển valueConverted hình trạng int khởi sinh sản nó bằng kết quả gọi DelegateconvertToInt với thông số truyền vào Delegatelà biến hóa 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ựa như như một hàm bình thường.

Do MyDelegateđã khởi tạo đồng bộ kiểu dữ liệu trả về với tham số nguồn vào với hàm ConvertStringToInt đề xuất convertToInt mới vừa lòng điều khiếu nại khởi sinh sản và thực hiện của hàm ConvertStringToInt này.

Vậy Delegatebản hóa học chỉ là 1 trong biến thay thế sửa chữa cho hàm, trở nên này tham chiếu đến hàm nó mong muốn tham chiếu để sửa chữa khi dùng. Giải pháp dùng y như gọi một hàm.

Vì sao đề xuất Delegate? khi chúng ta cần cần sử dụng một hàm như 1 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 vào C#

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

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

Bạn rất có thể loại bỏ Delegatetrong multicast bằng 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("Đã xay kiểu tài 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ụ như của phần trước.

Mình sản xuất 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 tham chiếu tới hàm ShowString với multicast là hiệu quả cộng của 2 DelegateconvertToInt và showString .

Mình hotline Delegatemulticast để thực hiện 1 lần 2 Delegatetuần trường đoản cú là convertToInt với showString.

Console.WriteLine("Kết trái khi hotline multicast Delegate");multicast(numberSTR);Khi cần loại bỏ Delegatetrong multicast các bạn chỉ việc trừ Delegatera

multicast = multicast - showString;

Dùng Delegate cho call-back function

Như tôi đã nói ở trên,Delegatecũng là một biến. Vậy cần mình có thể truyền Delegatevào hàm làm cho parameter như biến bình thường. Bây giờ Delegatenày sẽ tiến hành gọi là call-back function. Mục đích của bài toán này là hàm thừa nhận call-back function là param rất có thể gọi Delegateđược chuyển vào lúc nào cần như 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 tên 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, tôi đã sử dụng Delegatelàm call-back function thành công.

Ý nghĩa của ví dụ như là mỗi khi người dùng nhập vào tên của mình thì sẽ gọi DelegateShowString để hiển thị tên người dùng vừa nhập vào ra screen console. Vậy bây giờ hàm ShowString này trả toàn rất có thể được tư tưởng do người tiêu dùng mà không buộc phải 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 tạo Delegate trong C#Multicast(đa hướng) một Delegate vào C#Cách cần sử dụng Delegate trong C#Dùng Delegate như 1 call-back function

Bài học tập sau chúng ta sẽ cùng khám phá về sự kiện TRONG C#.

Cảm ơn chúng ta đã theo dõi bài viết. Hãy để lại comment hoặc góp ý của bản thân để 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: Bài Tập Trắc Nghiệm Benzen Và Đồng Đẳng, Trắc Nghiệm Benzen Và Đồng Đẳng

Thảo luận

Nếu các bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng rụt rè đặt câu hỏi trong phần BÌNH LUẬN dưới hoặc vào mục HỎI & ĐÁP trên tủ sách infokazanlak.com.com để cảm nhận sự cung ứng từ cộng đồng.