委托3

public delegate string TeaDelegate(string spText);//
class Program
{
static void Main(string[] args)
{
Operator op = new Operator();
//1、普通:委托实例化
//TeaDelegate tea = new TeaDelegate(op.GetTea);

//2、推断:委托的推断,并没有new 委托这个步骤,而是直接将Function 指定给委托
//TeaDelegate tea = op.GetTea;

//3、匿名委托
//至于匿名委托,给人的感觉更为直接了,都不用显示的指定方法名,因为根本没有方法,而是指定的匿名方法。
//匿名方法在.NET 中提高了代码的可读性和优雅性。
//对于更多操作较少的方法直接写为匿名函数,这样会大大提高代码的可读性。这里有两个值得注意的地方:
//第一,不能使用跳转语句跳转到该匿名方法外, 第二 不能使用ref,out修饰的参数
//bool flag = true;
//TeaDelegate tea = delegate (string spText)
//{
// if (spText == "去给我倒杯水")
// {
// if (flag)
// {
// return "老公,茶来了";
// }
// else
// {
// return "老公,没有水了";
// }
// }
// return "等待.......";
//};

//4、多播委托
//在一个委托上指定多个执行方法,这是在程序中可以行的。
//委托直接继承于System.MulticastDelegate,正是因为这个类可以实现多播委托。
//如果调用多播委托,就可以按顺序连续调用多个方法。为此,委托的签名就必须返回void;
//否则,就只能得到委托调用的最后一个方法的结果。所以在下面的这段代码中是得不到结果的
TeaDelegate tea1 = op.GetTea;
TeaDelegate tea2 = op.Speak;
TeaDelegate tea = tea1 + tea2;


Console.WriteLine("去给我倒杯水");
Console.WriteLine();
string result = tea("去给我倒杯水");
Thread.Sleep(3000);
Console.WriteLine(result);
Console.WriteLine();
Console.ReadKey();
}
}
public class Operator
{
/// <summary>
/// 确定是否还有水
/// </summary>
private bool flag = true;

public string GetTea(string spText)
{
if (spText == "去给我倒杯水")
{
if (flag)
{
return "老公,茶来了";
}
else
{
return "老公,没有水了";
}
}
return "等待.......";
}

public string Speak(string spText)
{
Console.WriteLine("\n去把我的设计图稿拿来");
return null;
}

}

posted @ 2017-09-21 08:53  jamfoot  阅读(106)  评论(0)    收藏  举报