C#扩展方法

发布时间:2021-05-16

一般来说,当我们使用某个类时,需要用到一些特别的方法,但却没有时。一般做法可能是创建一个基于该类的派生类,添加我们想要的方法,但这样做无疑增加了复杂度。所以这时候,扩展方法出现了。

扩展方法使你能够直接向现有类型“添加”方法。虽然扩展方法是一种静态方法,但可以像扩展类型上的实例方法一样进行调用。

基础

我这里以string类为例,给string扩展一个方法AppendText(),代码如下

public static string AppendText(this string str, string text)
{
       return str + text;
}

可以看出,扩展方法的特征包括了,使用static修饰;返回类型为待扩展类型;第一个参数格式使用了this,并且类型也必须是待扩展类型。

使用方法直接调用即可。

 var str = "ss";
 str = str.AppendText("sdsd");

//str = "sssdsd"

有一点值得注意的是,扩展方法一般定义在单独的静态扩展类中,不能定义在泛型静态类中。

扩展

扩展方法的特性可以让我们的程序变得更简洁,在Asp.Net Core中,对于类库的引用,类库服务的注册都可以使用扩展方法来保证代码的简洁。

//扩展注册方法
public static IServiceCollection AddService(this IServiceCollection service)
{
    service.AddScoped<IService1, Service1>();
    service.AddScoped<IService2, Service2>();
    service.AddScoped<IService3, Service3>();
    return service;
}

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    //使用扩展方法
    services.AddService();
}
其他阅读

使用中间件记录网站访问日志记录

对于网站访问日志的记录,一般情况下都是使用现有的日志服务,比如谷歌分析引入轻量 js 文件即可。本文主要介绍对于现有的 Asp.Net Core 网站使用中间件快速记录访问日志。使用中间件的好处:在服务端进行处理,无视客户端类型(特殊信息无法获取);统一处理,不需要对每个地址重复处理等。

查看原文

Js文件上传

文件上传是一个前端比较常见的功能,无论是以前的MVC客户端,还是现代化SPA客户端中,但万变不离其宗,其内核基本不变,本文就此讨论简单文件上传(以图片为例子)。

查看原文

软考中级-系统集成项目管理工程师复习总章

2025年下半年的软考将于11月开考,我将复习的过程笔记使用一个系列文章记录,本文只作为总章,将每个章节的复习时间和难度进行罗列,方便大家跟随学习。

查看原文

使用Cherry Studio搭配DeepSeek构建知识库

上篇文章,介绍了怎么在本地部署DeepSeek大模型服务,但是仅限于对话聊天,本文在之前的基础上,用DeepSeek搭配上Cherry Studio来构建个人知识库。

查看原文

Top 命令输出

top 命令是 Linux 中一个很常用的命令,其作用是将系统的性能统计和进程运行情况输出到控制台中,本文带着大家解析 top 命令输出的内容具体作用。

查看原文