namespace ConsoleApplication2
{
//最简单的委托的用法-----------------------------------
//delegate void SayHello(string pString);//声明一个委托
//class Program
//{
// static void Main(string[] args)
// {
// SayHello sh = EnglishHello;
// sh("English");
// sh = new Program().ChineseHello;
// sh("Chinese");
// Console.Read();
// }
// private void ChineseHello(string message)
// {
// Console.WriteLine(message);
// }
// private static void EnglishHello(string message)
// {
// Console.WriteLine(message);
// }
//}
//-----------------------------------------------------
//进化为匿名方法
//delegate void SayHello(string message);
//class Program
//{
// static void Main(string[] args)
// {
// SayHello sh = delegate(string message) { Console.WriteLine(message); };
// sh("hello");
// Console.Read();
// }
//}
//-----------------------------------------------------
//lamda表达式
//delegate void SayHello(string message);
//class Program
//{
// static void Main(string[] args)
// {
// SayHello sh = x => { Console.WriteLine(x); };
// sh("lamda");
// Console.Read();
// }
//}
//-----------------------------------------------------
//上面的代码都要声明一个委托,那么可以不声明委托吗,当然可以了,那么就涉及到两个系统声明的委托方法Action、Func
//Action 该方法只有一个参数,没有返回值
//public delegate void Action<in T>(T obj)
//Func封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
//public delegate TResult Func<in T, out TResult>(T arg)
更多请查看MSDN介绍 Action 和 Func
class Program
{
static void Main(string[] args)
{
Action<string> ac = sayHello;
ac("Action");
Action<string,int> ac1=sayHello1;
ac1("Action",1);
Action<string> ac2 = delegate(string message) { Console.WriteLine("ac2 "+message); };
ac2("ac2message");
Action<string> ac3 = s => { Console.WriteLine("ac3 "+s); };
ac3("ac3message");
Func<int, string> fc = sayHello2;
Console.WriteLine(fc(1));
Console.Read();
}
private static void sayHello(string message)
{
Console.WriteLine("hello word"+message);
}
private static void sayHello1(string message1,int message2)
{
Console.WriteLine("hello word" + message1+"-"+message2);
}
private static string sayHello2(int message1)
{
return ("hello word" + message1 + "-func");
}
}
//
//-------------------------------------------------------
//class Program
//{
// static void Main(string[] args)
// {
// }
//}
}