聲明:通過一個js的實例來告訴你C#也可以實現這樣的效果。 在JS中是這樣實現的: 你是否見過JS中給系統預設Array對象增加一個自定義查重方法contains 在沒有給Array原型上增加contains之前,通過vs編輯器是無法通過點的方式來調用contains 當給Array原型上增加con ...
聲明:通過一個js的實例來告訴你C#也可以實現這樣的效果。
在JS中是這樣實現的:
你是否見過JS中給系統預設Array對象增加一個自定義查重方法contains
在沒有給Array原型上增加contains之前,通過vs編輯器是無法通過點的方式來調用contains
<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之後,便可以通過點的方式進行調用
在C#中是這樣實現的:
需求:我們要在String對象上增加一個ToString2()的函數
在沒有給String對象增加ToString2()之前是無法通過點來調用ToString2()函數,下圖是無法找到ToString2()函數
當增加了擴展函數後便可以通過點的方式來調用擴展函數
語法:定義擴展方法,它必須是一個靜態類static,並且要使用this關鍵字來修飾要對那個對象進行操作。以上重點和最終效果均用紅線標註。
實現代碼:
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-師傅 %>
你學會了嗎?是不是逼格滿滿?