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表达式可以使用外部的变量。
这里涉及一个概念:以函数作为参数的函数叫高阶函数。
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表达式可以使用外部的变量。
相关文章推荐
- C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- C#笔记——lambda表达式(委托->匿名方法->lambda表达式)
- 写的非常好的文章 C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- C# 委托用法、匿名方法、Lambda表达式
- 再谈C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式(转载)
- C#学习日记25---匿名方法 与 Func委托 与 lambda表达式
- C#中的委托,匿名方法、泛型委托和Lambda表达式表达式演变过程
- (转)C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- c#之委托、匿名方法、Lambda表达式
- 一起谈.NET技术,C#中的委托,匿名方法和Lambda表达式
- (装载)C#中的委托,匿名方法和Lambda表达式
- (转)C#中的委托,匿名方法和Lambda表达式
- 委托是什么?匿名方法是什么?在C# 3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要的特性,它们带来了什么优势?BCL中哪些类库和这些特性有关?您平时最常用哪些