随笔 - 8  文章 - 1  评论 - 93  阅读 - 17353

.NET 增加扩展方法

声明:通过一个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-师傅
%>
复制代码

 

你学会了吗?是不是逼格满满?

posted on   托尔斯泰NET  阅读(1592)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示