匿名类和匿名方法

1.匿名类、匿名方法

 1 //匿名类:直接用new运算符实例化对象,匿名类的属性是只读的
 2 
 3 var aclass = new { Name = "meng", Age = 10 };
 4 
 5 //匿名方法:以集合为例,在编译过程中生成普通的方法
 6 
 7 List<int> intList = new List<int>() { 1, 2, 3, 4, 8, 9, 10, 70, 28 };
 8 
 9 //1.直接定义一个方法,传入集合方法
10 
11 var intlist1 = intList.FindAll(IsCheck);
12 
13 Console.WriteLine(string.Join(",", intlist1));
14 
15 //2.使用匿名方法:delegate(形参){方法体}
16 
17 var intlist2 = intList.FindAll(delegate(int num) { return num >= 10; });
18 
19 Console.WriteLine(string.Join(",", intlist2));
20 
21 //3.使用lambda表达式
22 
23 var intlist3 = intList.FindAll((int num) => { return num >= 10; });
24 
25 Console.WriteLine(string.Join(",", intlist3));
26 
27 //4.使用简化后的lambda表达式
28 
29 var intlist4 = intList.FindAll(num => num >= 10);
30 
31 Console.WriteLine(string.Join(",", intlist4));
32 
33 Console.ReadKey();

 

 
 

2.内置系统委托

 1 //内置系统委托:
 2 
 3 List<int> intList = new List<int>() { 1, 2, 3, 4, 8, 9, 10, 70, 28 };
 4 
 5 //1.public delegate bool Predicate<in T>(T obj) 一个参数返回bool值的委托
 6 
 7 intList.FindAll(i => i >= 10);
 8 
 9 //2.public delegate void Action<in T1,in T2>(T1 arg1,T2 arg2) 有参数无返回值委托的委托
10 
11 intList.ForEach(i => Console.WriteLine(i));
12 
13 //3.public delegate int Comparison<in T>(T x, T y); 有两个同类型的参数,返回int类型
14 
15 intList.Sort((m, n) => n - m);  //倒序排列
16 
17 intList.ForEach(i => Console.Write(i + ","));
18 
19 //4.public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2); 重点
20 
21 //有参数有返回值的委托
22 intList.FirstOrDefault(c => c == 3); 

 

3.扩展方法

 
 
//定义继承于Person类的子类

var obj = new SubPerson { Name = "孟旭东", Age = 18 };

//通过扩展方法转换为Person类
Console.WriteLine(obj.ConvertToT<Person>().Name); 
 

//1.扩展方法必须要在静态类中

//2.扩展方法必须是静态方法

//3.扩展方法的第一个参数必须加上this修饰符

//4.扩展方法如果和实例方法同名,若满足重载则构成重载,若不满足,则实例方法优先于扩展方法

//5.扩展方法第一个参数不能用ref、out修饰

public static class ExpandClass

{

    public static string FmtyyMMdd(this DateTime now)

    {

        return now.ToString("yyMMdd");

    }

    public static string FmtyyMMddHHmmss(this DateTime now, string from)

    {

        return now.ToString("yyMMddHHmmss") + ":" + from;

    }

    //与系统函数ToLower构成重载

    public static string ToLower(this string str,string from)

    {

        return str.ToLower()+","+from;

    }

    //泛型转换数据格式方法

    public static T ConvertToT<T>(this object obj)

    {

        try

        {

            return (T)obj;

        }

        catch

        {

            return default(T);

        }

    }

}

public class Person

{

    public string Name { get; set; }

    public int Age { get; set; }

}

public class SubPerson : Person

{

    public int Sex { get; set; }

} 

 

 
 
 
 
 
 
 
 
 
 
 
posted @ 2015-03-23 12:09  寒冰丿  阅读(356)  评论(0编辑  收藏  举报