DELEGATE LÀ GÌ

     

Dẫn nhập

Ở bài học kinh nghiệm trước, chúng ta đã thuộc nhau khám phá về ILIST trong C#. Hôm nay chúng ta sẽ cùng tìm hiểu về Delegate trong C#.

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

Nội dung

Để gọi hiểu bài bác này xuất sắc nhất chúng ta nên có kiến thức cơ bạn dạng về những phần:

Trong bài học này, họ sẽ cùng tìm hiểu các vấn đề:

Delegate là gì?Khai báo Delegate vào C#Khởi chế tạo ra Delegate vào 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ư một call-back function

Delegate là gì?

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

Delegate là một phát triển thành kiểu tham chiếu(references) chứa tham chiếu cho 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 công tác đang thực thi).

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

Bạn cứ gọi Delegate là một biến hóa bình thường, biến hóa này cất hàm mà bạn cần gọi. Sau này lôi ra sài như hàm bình thường. Quý hiếm của biến đổi Delegate bây giờ là tham chiếu cho hàm. Gồm thể thay đổi runtime khi lịch trình đang chạy.

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

Khai báo Delegate vào C#

Khai báo Delegate vào C# sẽ tương tự như như khai báo một biến. Nhưng bắt buộc thêm trường đoản cú khóa Delegate để xác định đấy là một Delegate. Đồng thời vì chưng Delegate là để tham chiếu đến 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ố đầu 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ố trường hợp 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 một Delegate mang tên là MyDelegate. MyDelegatecó loại trả về là int, một tham số nguồn vào là string.

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

Khởi chế tạo ra và thực hiện Delegate vào C#

Khi dạng hình Delegateđược khai báo, đối tượng người sử dụng Delegatephải được chế tạo với từ bỏ khóa new cùng được tham chiếu cho một cách tiến hành cụ thể. Cách tiến hành này nên cùng hình trạng 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 điện thoại tư vấn phương thức, nhưng mà không bao gồm tham số tới thủ tục đó. Tức là chỉ truyền tên hàm vào thôi. Delegatesẽ tự nhận định hàm được chuyển vào có 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ị đang convert thành int: " + valueConverted); 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; 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 sẽ phân tích và lý giải một chút:

Ở đây mình tạo thành một hàm ConvertStringToInt làm trọng trách là đưa kiểu dữ liệu của một số từ string sang int.Mình áp dụng Delegatebằng bí quyết tạo một thay đổi convertToInt tất cả kiểu dữ liệu là MyDelegate. ConvertToInt này bản thân new MyDelegatevới tham số nguồn vào là tên hàm ConvertStringToInt(lưu ý chỉ tên hàm thôi).Mình có biến numberSTR hình dáng string khởi chế tạo giá trị là 35.Mình sinh sản một đổi thay valueConverted phong cách int khởi tạo ra nó bằng công dụng gọi DelegateconvertToInt với tham số truyền vào Delegatelà biến đổi numberSTR.Kết trái xuất ra màn hình 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.

Xem thêm: Giới Thiệu Sqlite Là Gì - Giới Thiệu Sqlite Và Thực Hành Lệnh Sql

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

Vậy Delegatebản chất chỉ là một trong những biến thay thế cho hàm, trở thành này tham chiếu đến hàm nó muốn tham chiếu để sửa chữa thay thế khi dùng. Biện pháp dùng y như call một hàm.

Vì sao nên Delegate? khi bạn cầ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 vào C#

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

Bản chất bạn cũng có thể làm một chuỗi Delegatecùng giao diện Delegatebằng cách dùng toán tử +. Từ bây giờ khi chúng ta gọi Delegatesẽ triển khai 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ị sẽ convert thành int: " + valueConverted); Console.WriteLine("Kết trái 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 lấy ví dụ như của phần trước.

Mình tạo nên 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 chế tạo ra thêm 2 Delegatelà showString tham chiếu cho tới hàm ShowString cùng multicast là công dụng cộng của 2 DelegateconvertToInt và showString .

Mình gọi Delegatemulticast để tiến hành 1 lần 2 Delegatetuần từ bỏ là convertToInt cùng showString.

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

multicast = multicast - showString;

Dùng Delegate mang lại call-back function

Như mình đã nói sinh sống trên,Delegatecũng là 1 trong những biến. Vậy nên mình có thể truyền Delegatevào hàm làm parameter như trở thành bình thường. Từ bây giờ Delegatenày sẽ được gọi là call-back function. Mục tiêu của bài toán này là hàm nhận call-back function là param có thể gọi Delegateđược chuyển vào bao giờ cần 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 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à từng khi người dùng nhập vào tên của bản thân thì sẽ hotline 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 định nghĩa do người tiêu dùng mà không cần 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 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 cần sử dụng Delegate vào C#Dùng Delegate như 1 call-back function

Bài học tập sau họ sẽ cùng tìm hiểu về event TRONG C#.

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

Xem thêm: College Là Gì ? College Và University Khác Nhau Ở Điểm Nào? Bạn Có Nên Học Community College Tại Mỹ Không

Thảo luận

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