您的位置:首页 > 编程语言 > C#

C#的委托,匿名方法和Lambda表达式

2013-02-28 16:54 501 查看
委托只是一种特殊类型的对象,区别是其他对象包含数据,委托包含的是一个或多个方法的地址。

这里涉及一个概念:以函数作为参数的函数叫高阶函数。

private delegate void string GetStr()

public static void main()

{

int x = 100;

GetStr dGetStr =new GetStr(x.ToString);

//或者:编译器会通过声明的类型检测需要的委托类型,自动创建委托的一个实例

dGetStr =x.ToString;

Console.WriteLine(“stringis {0}”, dGetStr);

}

C#中可用的委托类型:

Action<T>:可传递不同的参数类型和个数

Func<in T, out TResult>:可传递不同的参数类型和个数,和一个返回值

例,自定义类的排序:

class BubbleSorter

{

static public voidSort<T>(IList<T> arrSort, Func<T, T, bool> comparison)

{

for (int j = arrSort.Count- 1; j > 0; j--)

{

for (int i = 0; i < j; i++)

{

if(comparison(arrSort[i + 1], arrSort[i]))

{

T temp =arrSort[i];

arrSort[i] =arrSort[i + 1];

arrSort[i + 1]= temp;

}

}

}

}

}

class User

{

public int Id { get; privateset; }

public string Name { get;private set; }

public int Age { get; privateset; }

public User(int id, stringname, int age)

{

this.Id = id;

this.Name = name;

this.Age = age;

}

public static boolCompareAge(User u1, User u2)

{

return u1.Age < u2.Age;

}

}

class Test

{

public static void main()

{

User[] users =

{

new User(1,"user1", 20),

new User(2,"user2", 10),

new User(3, "user3", 15),

new User(4,"user4", 10),

};

BubbleSorter.Sort(users,User.CompareAge);

}

}

匿名方法

Func<string, string, string> tDel = delegate(string param1, string param2)

{

return param1 + param2;

}

Console.WriteLine(tDel("I'm String1", "I'm String2"));

C#3.0 开始可以使用Lambda表达式,这样就不需要提供匿名方法的参数。

Lambda表达式:

Func<string, string, string> tLambda = (param1, param2) => param1 + param2;

Console.WriteLine(tLambda("I'm String1", "I'm String2"));

实现代码多行时,不需要加花括号。

Lambda表达式可以使用外部的变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: