run in this way,   no why,   only for you heart
CSDN博客(点击进入) CSDN
51CTO(点击进入) 51CTO

C# 扩展方法

通常我们都在使用.net自带类库或者第三方类库,有时候我们无法查看他们的代码,但是我们需要一些新的功能,这个时候我们就可以自己去定义一些自己想要的方法,就是扩展方法。


扩展方法要求:
1.必须是定义在静态类中的静态方法;
2.第一个参数的类型是要扩展的类型;
3.第一个参数需要添加this关键字以标识其为扩展方法。
说明: 第3步中必须要有this关键字标识其为扩展方法,当我们想使用该扩展方法时,必须是一个对象来调用该方法,那么该对象必须是属于this关键字后引用的对象。


Demo示例:
1.最简单的扩展方法,string类扩展一个固定返回数据的扩展方法:

	public static class MyString
    {
        public static string ReturnString(this string s)
        {
            return "string类的扩展方法ReturnString";
        } 
    }
    
	public  static void Main(string[] args)
    {
        string str = "";
        string result = str.ReturnString();
	}

2.使用自定义类为扩展类型,为其添加一个扩展方法:

	//自定义博客类
	public class Blog
    {
        public string RenName(string name)
        {
            return name;
        }
    }
  
   //偷懒一点,直接在MyString类中加上一个返回博客名的扩展方法
  	public static class MyString
    {
        public static string AddBlogName(this Blog blog,string name)
        {
            string ResName =blog.RenName(name)+"的博客";
            return ResName;
        }
    }
    
	//此时我们想使用“返回博客名的扩展方法”,应该先有一个扩展属性Blog的对象,才可以去调用
	public  static void Main(string[] args)
    {
        Blog blog = new Blog();
        string blogName = blog.AddBlogName("小龙人");  //小龙人的博客
	}

3.在lambda表达式中对集合有一个where方法,再此我们针对其写一个MyWhere扩展方法:

	//依然写在MyString类中了
	public static class MyString
    {     
        public static List<int> MyWhere(this List<int> list,Func<int,bool> func)
        {
            List<int> newList = new List<int>();
            foreach (int i in list)
            {
                if (func(i))
                {
                    newList.Add(i);
                }
            }
            return newList;
         }
     }

	public static void Main(string[] args)
     {
         List<int> list = new List<int> { 3, 7, 2, 1, 8, 15, 99 };
         List<int> newList = list.MyWhere(a => a > 5);
     }

到这里结束,不足之处,望指出。
源码:https://github.com/wangqilong1225/C-Sharp-Test/tree/master/ExtendMethodDemo

posted @ 2019-08-19 22:38  _小龙人  阅读(109)  评论(0)    收藏  举报