zoukankan      html  css  js  c++  java
  • 匿名类和匿名方法

    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; }
    
    } 
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Arch安装KDE5
    Gentoo解决Windows系统txt文本中文乱码问题
    用e2fsck修复受损的linux文件系统
    linux远程控制windows
    vim常用命令
    bash shell 常用快捷键
    Deepin Linux 安装JDK
    Linux清除磁盘上的RAID信息
    IDEA社区版运行并发布web项目
    CentOS 7 ibus 导入第三方词库
  • 原文地址:https://www.cnblogs.com/notniu/p/4359399.html
Copyright © 2011-2022 走看看