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