Take advantage of delegates lớn promote flexibility in your designs & implement event-driven programming with ease
A delegate is a type-safe function pointer that can reference a method that has the same signature as that of the delegate. You can take advantage of delegates in C# to implement events & call-back methods. A multicast delegate is one that can point to one or more methods that have identical signatures.
Bạn đang xem: Delegate c# là gì
Understanding delegates in C#
In essence, a delegate holds a reference khổng lồ a method & also khổng lồ the target object on which the method should be called. Delegates in C# are similar to lớn function pointers in C++, but C# delegates are type safe. You can pass methods as parameters khổng lồ a delegate to lớn allow the delegate to lớn point to the method. Delegates are used to define callback methods & implement sự kiện handling, and they are declared using the “delegate” keyword. You can declare a delegate that can appear on its own or even nested inside a class.
There are three steps in using delegates. These include declaration, instantiation, & invocation.
The signature of a delegate looks like this:
delegate result-type identifier (
public delegate void MyDelegate(string text);As you can see in the above statement, the delegate name is “MyDelegate,” it has a return type of “void,” & it accepts a string object as an argument. This implies that the delegate MyDelegate can point lớn a method that has an identical signature. This is just a declaration though — you must instantiate a delegate before you can use it. The statement given next shows how you can instantiate the delegate declared above.
MyDelegate d = new MyDelegate(ShowText);Once you have declared và instantiated the delegate, you can invoke the method that the delegate points khổng lồ easily.
d("Hello World...");Here, d is the delegate instance
You can also invoke the method that the delegate instance points khổng lồ using the Invoke() method on the delegate instance as shown below.
d.Invoke("Hello World...");If you have a method that accepts two numbers & you want to add them & return the sum of the two numbers, you can use a delegate to lớn store the return value of the method as shown in the code snippet given below.
int result = d(12, 15);Here is the complete code listing for your reference.
using System;namespace Delegates public delegate int MyDelegate(int x, int y); class Program static int Sum(int x, int y) return x + y; static void Main() MyDelegate d = new MyDelegate(Sum); int result = d.Invoke(12, 15); Console.WriteLine(result); Console.ReadLine();
Delegates in kích hoạt in C#Here is the complete code listing.
using System;namespace Delegates public delegate void MyDelegate(string text); class Program public static void ShowText(string text) Console.WriteLine(text); static void Main() MyDelegate d = new MyDelegate(ShowText); d("Hello World..."); Console.ReadLine(); Note that you can assign multiple objects to a delegate instance using the + operator, which makes the delegate a multicasting delegate. You can also combine delegate instances using the static method Combine.
The runtime maintains a các mục (also called Invocation list) internally lớn execute multiple methods. The following code listing shows how you can use the Combine() method khổng lồ combine multiple delegate instances.
myDelegate d1 = new myDelegate(Method1);myDelegate d2 = new myDelegate(Method2);myDelegate multicastDelegate = (myDelegate)Delegate.Combine(d1, d2);multicastDelegate.Invoke();A delegate that can point to lớn multiple methods is known as a multicast delegate. Chú ý that delegate instances are immutable. So, when you combine delegates or subtract one delegate instance from the list, a new delegate instance is created to lớn represent the updated or new danh sách of the targets or methods khổng lồ be invoked.
Multicast delegates in action in C#
The following code listing illustrates a multicast delegate. Lưu ý the usage of the delegate instance: Here we have used the += operator lớn assign the delegate to lớn multiple methods that have identical signatures.
Xem thêm: Hột Xoàn Là Gì - Hột Xoàn Và Kim Cương Có Phải Là Một
using System;namespace Delegates public delegate void MyDelegate(); class Program public static void Method1() Console.WriteLine("Inside Method1..."); public static void Method2() Console.WriteLine("Inside Method2..."); static void Main() MyDelegate d = null; d += Method1; d += Method2; d.Invoke(); Console.ReadLine(); Delegates are ideally suited to implementing event driven programming. A delegate doesn’t need to know the class of the object khổng lồ which it refers. All it needs to lớn know is the signature of the method khổng lồ which it would point. Proper usage of delegates can promote reusability in your code and flexibility in your designs. You can refer khổng lồ Microsoft’s online documentation for more information on delegates.