声明:经过一个js的实例来告诉你C#也能够实现这样的效果。编辑器
在JS中是这样实现的:函数
你是否见过JS中给系统默认Array对象增长一个自定义查重方法containsthis
在没有给Array原型上增长contains以前,经过vs编辑器是没法经过点的方式来调用containsspa
<script> //Array对象自己没有contains方法,我在这里为它增长一个扩展方法 //这样就能够经过“点”的方式来像系统内置函数同样使用,是否是逼格满满? Array.prototype.contains = function (val) { for (var i = 0; i < this.length; i++) { if (this[i] == val) { return true; } } return false; } var arr = [1, 3, 5, 7]; var res=arr.contains(1); //res=true </script>
当给Array原型上增长contains以后,即可以经过点的方式进行调用prototype
在C#中是这样实现的:3d
需求:咱们要在String对象上增长一个ToString2()的函数code
在没有给String对象增长ToString2()以前是没法经过点来调用ToString2()函数,下图是没法找到ToString2()函数对象
当增长了扩展函数后即可以经过点的方式来调用扩展函数blog
语法:定义扩展方法,它必须是一个静态类static,而且要使用this关键字来修饰要对那个对象进行操做。以上重点和最终效果均用红线标注。ip
实现代码:
1.新建一个StringExtension类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Helper { public static class StringExtension { public static String ToString2(this string s) { return s+" by-师傅"; } } }
2.在页面(Default.aspx)上面调用
<%@ Page Language="C#" %> <%--须要引入扩展类的命名空间--%> <%@ Import Namespace="Helper" %> <% string res = string.Empty; string str = "我是字符串"; res = str.ToString2(); Response.Write(res); //最终输出:我是字符串 by-师傅 %>
你学会了吗?是否是逼格满满?