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

其他阅读

在ASP.NET Core中使用过滤器

ASP.NET Core是一个高性能的Web开发框架,过滤器(Filter)在ASP.NET Core中被用于路由方法之上,可以在路由方法执行前后完成一些额外的操作。本文将会介绍在ASP.NET Core中使用 IActionFilter 实现过滤器并读取路由方法中的参数。

WPF使用云母材质

在最新的Windows 11 OS中,微软为流畅设计(Fluent Design)带来了新的云母材质,云母材质一种不透明的动态效果,微软将其作为Windows 11应用窗体的默认材质。

记录Unity中的坑

Unity虽然使用C#来进行开发,但是Unity所使用的运行时和.net的原生运行时却又差别,这导致在.net中的某些代码块在Unity中运行会出现错误。

记录一次Unity中的同步问题

在以前做的数字孪生应用中,使用的 socket 进行定制协议开发,服务和 Unity 客户端之间可以互相进行通信,在开发时代价太大,除了正常制定数据协议外,还需要针对粘包定制切包协议。在WEB化的过程中,准备把原有的数字孪生服务端进行迁移,使用全新的 asp.net core 进行开发,双方使用 signalR 进行数据交互。

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

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