C#扩展方法

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

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

基础

我这里以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();
}
发布时间:2021-05-16
其他阅读

静态文件防盗链的一种思路

在我们的系统中,总会有一些资源需要保护起来不被盗走,如果是动态接口可以通过验证权限来保护,静态资源大多需要对外开放,比较难以保护,本文就介绍保护静态文件资源一种思路——那就是使用 HTTP 中 Referer 头。

查看原文

Web前端中实现一个拖动效果

在原生客户端开发中,窗口拖动是一个比较常用的操作。今天把这个效果在网页客户端中实现以下,文章记录一下效果。

查看原文

C#桌面应用置顶

Winform和WPF开发中,有时会有需要置顶窗体的需求,本文就介绍怎么使用Win32API进行置顶

查看原文

Blazor文件上传解决方案

Blazor 是由 Asp.Net Core 团队推出的一个Web前端SPA解决方案,其中包括了使用 WebAssembly 的 Blazor Wasm 和使用 SignalR 进行实时交互的 Blazor server。本篇文章中使用的是 Blazor Wasm 方案来验证上传文件的操作。

查看原文

浅析web前端中的MVC模式

MVC是常见的软件架构设计模式,它通过分离关注点改进代码的组织方式。区别于软件设计模式,只是为了解决问题总结出的抽象方法,一种架构模式种往往会用到多种设计模式。

查看原文