C# 中有常见的以以下名称为后缀的类型,笔者总结了一下大概用途。

Extensions

此类型用于实现拓展函数,类名后加上 Extensions

如下面的示例实现了拓展函数,就是我们平时使用的 app.UseAuthentication();

    public static class AuthAppBuilderExtensions
{
public static IApplicationBuilder UseAuthentication(this IApplicationBuilder app)
{
if (app == null)
{
throw new ArgumentNullException(nameof(app));
}
return app.UseMiddleware<AuthenticationMiddleware>();
}
}

Helper 或 Helpers

指工具类一般没有特殊意义,用于表示此类型用于完成某些辅助操作,例如一些转换、序列化,大多数情况下设置成静态类。

例如 Microsoft.AspNetCore.Cors.Infrastructure 中处理 Uri 的工具类。

    internal static class UriHelpers
{
public static bool IsSubdomainOf(Uri subdomain, Uri domain)
{
return subdomain.IsAbsoluteUri
&& domain.IsAbsoluteUri
&& subdomain.Scheme == domain.Scheme
&& subdomain.Port == domain.Port
&& subdomain.Host.EndsWith($".{domain.Host}", StringComparison.Ordinal);
}
}

Scheme

代表方案、种类或处理方式,一般使用在枚举或者指明是某种类型下使用,大多属于常量。

例如 ASP.NET Core 中,原来配置 Jwt 认证的代码如下

            services.AddAuthentication(options=>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
// Cookie CookieAuthenticationDefaults.AuthenticationScheme

Builder

此种类型的设计模式称为建造者模式,一般用于函数式编程链式调用生成某个类型。

作用是将构建一个复杂的对象的过程抽象出来,使用不同的过程构建对象的不同部件。

例如 StringBuilder 就是用于构建字符串的。另外 ASP.NET Core 中,IHost 的构建过程如下。

        public static void Main(string[] args)
{
ConsoleToke();
var host = CreateHostBuilder(args).Build();
host.Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});

Context

上下文,HTTP请求上下文,访问上下文,线程上下文等。

例如 EFCore 中的 DbContext,Http 请求中的 HttpContext,多线程中的 CurrentContext

Factory

工厂模式, 作用是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

例如 ASP.NET Core 的注入服务中

        private static ServiceProvider serviceProvider;
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// ...
// ...
serviceProvider = services.BuildServiceProvider();
} // 获取任意实现了 TInterface 接口的实例
public TInterface GetAnyInterface<TInterface>()
{
return serviceProvider.GetService<TInterface>();
}

下面的代码中,可以动态实例化返回一个需要的类型。

            public static Func<T> CreateFactory<T>(Type implementation)
{
return ((IActivator<T>)Activator.CreateInstance(typeof(AlgorithmActivatorCore<>).MakeGenericType(implementation))).Creator;
}

Provider

提供者模式,微软发明~

这个我找了很久,在维基百科找到资料 https://en.wikipedia.org/wiki/Provider_model

提供者模式的设计和规范,可以参考微软文档 https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/ms972319(v=msdn.10)?redirectedfrom=MSDN

这里有练习实践教程 https://www.c-sharpcorner.com/uploadfile/webmaster3/provider-design-patterns-in-Asp-Net-2-0/

https://www.codemag.com/Article/0711081/The-Provider-Model

Options

原来当某种配置的模型类型。

例如 ASP.NET Core 中,记录 jwt 认证配置的类型。

 public class JwtBearerOptions : AuthenticationSchemeOptions
{
public bool RequireHttpsMetadata { get; set; } = true;
public string MetadataAddress { get; set; }
public string Authority { get; set; }
public string Audience { get; set; }
... ...
}

Defaults

定义常量、默认值。

    public static class JwtBearerDefaults
{
public const string AuthenticationScheme = "Bearer";
}

C# 一些类名的后缀及其意义的更多相关文章

  1. 提高C#代码质量-规范

    [规范习惯]命名规范1-命名空间 使用<Company>.<Component>2-程序集不必与命名空间同名3-命名空间使用附复数4-避免与FCL的类型重名5-类型名称用名词6 ...

  2. Java代码规范

    Java代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改.本文档中没有说明的地方,请参看SUN Java标准代码规范.如果两边有冲突,以SU ...

  3. java正则表达式语法详解及其使用代码实例

    原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...

  4. java学习面向对象之异常之一

    一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...

  5. Java学习笔记【持续更新】

    一个简单的java程序如下: class Sakura { public static void main(String[] arges) { system.out.println("Hel ...

  6. Scala详解

    1       快速入门... 4 1.1             分号... 4 1.2             常变量声明... 4 1.2.1         val常量... 4 1.2.2  ...

  7. 【JAVA】 02-Java对象细节

    链接: 笔记目录:毕向东Java基础视频教程-笔记 GitHub库:JavaBXD33 目录: <> <> 内容待整理: 面向过程: 代表语言-c:即通过函数体现,并不断调用函 ...

  8. Java异常类及处理

    异常概述:运行时发生的不正常情况 在java中用类的形式对不正常的情况进行了描述和封装对象. 描述不正常的类,称之为异常类. 异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述 ...

  9. iOS团队代码规范

    iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...

  10. ASP.NET Core 中文文档 第四章 MVC(3.9)视图组件

    作者: Rick Anderson 翻译: 娄宇(Lyrics) 校对: 高嵩 章节: 介绍视图组件 创建视图组件 调用视图组件 演练:创建一个简单的视图组件 附加的资源 查看或下载示例代码 介绍视图 ...

随机推荐

  1. python2和python3的版本历史及入门书籍

    python版本历史 我们端游项目使用是python2.7版本 32位 python2 2.7.18 last version on 2020.4.20 2.7 first version on 20 ...

  2. 从零开始配置 vim(10)——快捷键配置

    之前我们对neovim 进行了基础的配置,这篇主要介绍我比较常用的快捷键配置.到这篇开始我们的配置已经可以为两个大的模块--基础配置和快捷键配置.我们的目录也应该按照模块来进行组织.在正式配置之前让我 ...

  3. 大语言模型的预训练4:指示学习Instruction Learning详解以及和Prompt Learning,In-content Learning区别

    大语言模型的预训练[4]:指示学习Instruction Learning:Entailment-oriented.PLM oriented.human-oriented详解以及和Prompt Lea ...

  4. gym中的discrete类、box类和multidiscrete类简介和使用

    相关文章: Box() dict()可用于创建连续的空间:OpenAI Gym Discrete和Box spaces同时存在,代码该怎么写:gym中各种离散连续写法 解读gym中的action_sp ...

  5. C++ Boost库 操作字符串与正则

    字符串的查找与替换一直是C++的若是,运用Boost这个准标准库,将可以很好的弥补C++的不足,使针对字符串的操作更加容易. 字符串格式转换: #include <iostream> #i ...

  6. 使用 docker 部署 kafka

    在很多时候我们需要使用到消息队列, 其中 kafka 是一个非常优秀的消息队列, 在我们平时开发中也经常会用到, 但是在开发环境中部署 kafka 是一个非常麻烦的事情 在 kafka 官网上, 有一 ...

  7. 一文搞懂 Vue3 defineModel 双向绑定:告别繁琐代码!

    前言 随着vue3.4版本的发布,defineModel也正式转正了.它可以简化父子组件之间的双向绑定,是目前官方推荐的双向绑定实现方式. vue3.4以前如何实现双向绑定 大家应该都知道v-mode ...

  8. 【Flink入门修炼】1-1 为什么要学习 Flink?

    流处理和批处理是什么? 什么是 Flink?为什么要学习 Flink? Flink 有什么特点,能做什么? 本文将为你解答以上问题. 一.批处理和流处理 早些年,大数据处理还主要为批处理,一般按天或小 ...

  9. 国产数据库TiDB初体验:简单易用,快速上手

    最近开始关注国产数据库的发展,为了能从技术人员的角度来实际体验国产中目前最流行的TiDB数据库,从今天起,在官方公布的课程开始正面了解TiDB的设计理念. 看了2小时的入门课程介绍,总体来说,还是有不 ...

  10. 【译】我为 .NET 开发人员准备的 2023 年 Visual Studio 10 大新功能

    原文 | James Montemagno 翻译 | 郑子铭 Visual Studio 2022 在 2023 年发布了许多令人难以置信的功能,为 .NET 开发人员提供了大量新工具来提高他们的工作 ...