• 扩展方法


    对扩展方法的理解我想:就是给已有程序添加方法,但是这个由三个约束

    1、必须是静态类

    2、必须是静态fangfa

    3、方法中的第一个参数类型中必须有this关键字

    namespace 扩展方法
    {
        class Program
        {
            static void Main(string[] args)
            {
                (new User() { Name = "张三", Age = 23, Pay = 1234 }).ShowInfo();
            }
        }
        class User
        {
            public string Name {get;set; }
            public int Age { get; set; }
            public double Pay { get; set; }
            public override string ToString()
            {
                return string.Format("姓名:{0},年龄:{1},工资:{2}",Name,Age,Pay);
            }
        }
        /// <summary>
        /// 扩展方法三要素:静态类、静态方法、this 关键字
        /// </summary>
        static class Display
        {
            public static void ShowInfo(this object s)
            {
                Console.WriteLine(s.ToString());
                Console.ReadLine();
            }
        }
    }

    再看看下面的一个例子

    //using System.Collections.Generic;
    namespace System.Collections.Generic//这样写就不用在其他文件中添加命名空间了 
    {
        /// <summary>
        /// 这是在覆写FindAll委托方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="i"></param>
        /// <returns></returns>
        public delegate bool IsMyOrder<T>(T i);
        public static class MyExten
        {
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="list">泛型类对象</param>
            /// <param name="del">泛型委托</param>
            /// <returns></returns>
            public static List<T> MyFirstExten<T>(this List<T> list,IsMyOrder<T> del)
            {
                List<T> result = new List<T>();
                foreach (var item in list)
                {
                    if (del(item))
                    {
                        result.Add(item);
                    }
                }
                return result;
            }
        }
    }
            static void Main(string[] args)
            {
                List<string> list = new List<string> { 
                    "1",
                    "2",
                    "3",
                    "4",
                    "5"
                };
                var temp = list.MyFirstExten(MyOrder);
                //微软封装好的方法
                //var temp = list.FindAll(a => int.Parse(a) >= 2);
                foreach (var item in temp)
                {
                    Console.WriteLine(item);
                }
                Console.ReadKey();
            }
            static bool MyOrder(string str)
            {
                if (int.Parse(str) >= 2)
                {
                    return true;
                }
                return false;
            }

    list.MyFirstExten(MyOrder);这句代码其实传递了两个参数,public static List<T> MyFirstExten<T>(this List<T> list,IsMyOrder<T> del)
    list代表了当前类的实例,T:String,对应的委托参数也必须是string类型

  • 相关阅读:
    C#学习第四弹之封装、继承和多态
    C#学习第三弹之给常量赋值可能引发的问题
    C#学习第二弹之C#与.NET框架
    hdu 5199 map或二分或哈希
    hdu 5195 线段树
    hdu 2545 并查集
    ACM数论模板
    C#学习第一弹之Hello World
    对字符串进行频繁拼接的话,使用StringBuffer或者StringBuilder
    String中根据,(逗号)进行分割
  • 原文地址:https://www.cnblogs.com/chenyongblog/p/3324791.html
Copyright © 2020-2023  润新知