C#对委托的初步理解理解
作为新手对委托的学习:
1.定义委托:委托实际上是一个类,在定义委托前就知道了方法的返回类型和方法的参数类型(可以把委托理解为只知道方法的返回类型和方法的参数类型,不知道方法体)
public delegate string TestDelegate(string test);
/*编译后会生成如下的一个完整类:
public sealed class GreetingDelegate:System.MulticastDelegate
{
public GreetingDelegate(object @object, IntPtr method);
public virtual IAsyncResult BeginInvoke(string name, AsyncCallback callback, object @object);
public virtual void EndInvoke(IAsyncResult result);
public virtual void Invoke(string name);
}
*/
2.实例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Demo { public delegate string TestDelegate(string name);//定义委托,委托实际上是一个类 //新建一个类来测试委托调用方法 public class Test { public void GreetPeople(string name, TestDelegate delegate1) { //if (delegate1 != null)//如果有方法注册委托变量 //{ // delegate1(name);//通过委托调用方法 //} delegate1?.Invoke(name);//(与上面的if等价) } } class Program { private static string TestMethod(string name) { Console.WriteLine("你好," + name); return null; } static void Main(string[] args) { Test gm = new Test(); //使用委托调用TestMethod方法 gm.GreetPeople("panter", TestMethod); Console.WriteLine(); //使用委托调用lambda Console.Write("使用了lambda:"); gm.GreetPeople("潘特", lambdatest => { Console.WriteLine("你好,"+lambdatest); return null; }); Console.ReadKey(); } } }
结果: