聲明:經過一個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-師傅 %>
你學會了嗎?是否是逼格滿滿?