C#中委托的演变
C#1 中,通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例
C#2中,引入了匿名方法的概念,作为一种编写可在委托调用中执行的未命名内联句块的方式
C#3 中,引入了lambda 表达式,这种表达式和匿名方法类似,但更具表达力 更简单。
匿名方法 和lambda表达式 合起来被称为匿名函数
class Program
{
delegate void TestDelegate(string s);
static void M(string s)
{
Console.WriteLine(s);
}
static void Main(string[] args)
{
TestDelegate testD1 = new TestDelegate(M);// C#1
TestDelegate testD2 = delegate (string s) { Console.WriteLine(s); }; // C#2
TestDelegate testD3 = (x) => { Console.WriteLine(x); }; //C#3
testD1("I am from C#1");
testD2("I am from C#2");
testD3("I am from C#3");
}
}```
```csharp
class Program
{
delegate bool CompareString(string s1,string s2);
static void M(string s)
{
Console.WriteLine(s);
}
static string getString(string s1, string s2, CompareString prediction)
{
if (prediction(s1, s2))
return s1;
else
return s2;
}
static void Main(string[] args)
{
//C#2
string ifGreater = getString("xx", "aa", delegate (string x1, string x2) { if (string.Compare(x1, x2) >= 0) return true; else return false; });
//C#3
string ifSmaller = getString("xx", "aa", (x1, x2) => { if (string.Compare(x2, x1) >= 0) return true; else return false; });
Console.WriteLine(ifGreater);
Console.WriteLine(ifSmaller);
}
}