C#委托与事件之委托
整理了一下委托的几种使用方法,都在代码里面了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DelegateAndEvent
{
class Program
{
/*以下是委托类型的定义形式*/
//定义了一个委托类型,这个委托类型的名字是GetAString,他可以指向一个参数为空,返回值为string的方法.
private delegate string GetAString(); //无参有返
private delegate void PrintString(); //无参无返
public delegate void GreetingDelegate(string name); //有参无返
static void Main(string[] args)
{
int x = 40;
int y = 50;
string name1 = "小包子";
string name2 = "小饼干";
//*1.第一种使用方法 : new一个委托实例.
//实例化一个委托类型,类似于实例化一个类,在实例化的过程中需要传递进去一个方法作为参数.
//a指向了x.ToString()方法.
//------例一
GetAString a = new GetAString(x.ToString);
string s = a();//通过委托实例去调用方法.
//------例二(写法一)
GreetingDelegate delegate4;
delegate4 = EnglishGreet;
delegate4 += ChineseGreet;
delegate4("小面包");//委托实例直接调用方法.
//------例二(写法二)
GreetingDelegate delegate5 = new GreetingDelegate(ChineseGreet);
delegate5 += EnglishGreet;
//*2.第二种使用方法 : 给委托对象赋值(绑定)方法.
//--------例一
GetAString b = y.ToString;
string s1 = b.Invoke();
//--------例二
GreetingDelegate delegate1, delegate2;
delegate1 = ChineseGreet;
delegate2 = EnglishGreet;
GreetPeople(name1, delegate1);
GreetPeople(name2, delegate2);
//--------例三 : 同一个委托绑定多个方法
GreetingDelegate delegate3;
delegate3 = ChineseGreet;
delegate3 += EnglishGreet;
GreetPeople(name2,delegate3);//将依次调用先后被绑定上去的两个方法.
//3.第三种使用方法:把委托类型对象当成一个参数来使用.
PrintString print=TestMethod1;
PrintStr(print);//print:Method1
//4.把方法作为参数的直接体现.
GreetPeople("花花", ChineseGreet);//print:你好,花花.
GreetPeople("huahua", EnglishGreet);//print:Hello,花花.
Console.WriteLine(s);//print:s=40
Console.WriteLine(s1);//print:s1=50
Console.ReadKey();
}
static void PrintStr(PrintString print)
{
print();//相当于调用了GetAString类型的.
}
static void TestMethod1()
{
Console.WriteLine("Method1");
}
//该方法为核心方法,它接收一个GreetingDelegate类型的方法作为参数.
static void GreetPeople(string name,GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
static void ChineseGreet(string name)
{
Console.WriteLine("你好," + name);
}
static void EnglishGreet(string name)
{
Console.WriteLine("Hello," + name);
}
}
}
此篇只是整理留作个人复习使用,下面这篇博文是我个人觉得对委托与事件讲解的非常透彻的一位大牛的分享,连接奉上:http://www.tracefact.net/tech/009.html