Fork me on GitHub

扩展方法

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

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类型

posted @ 2013-09-16 18:37  种花生的读书人  阅读(200)  评论(0编辑  收藏  举报

该博客仅作为记录笔记,转载随意