zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mxnet笔记
    8.1.18示例:使用forName()的扩展
    8.1.17使用1.2版本的用户自定义类装载器
    8.1.16 使用1.1版本的用户自定义类装载器
    8.1.13 _quick 指令
    8.1.12直接引用
    8.1.11编译时常量解析
    8.1.10装载约束
    8.1.8 解析CONSTANT_String_info入口
    8.1.7 解析CONSTANT_interfaceMethodref_info入口
  • 原文地址:https://www.cnblogs.com/wangqilong/p/12540371.html
Copyright © 2011-2022 走看看