C#一些类名的后缀及其意义

简介: 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# 反射通过类名实例化类
在面向对象编程的时候,会遇到这样的问题,一个父类有多个子类,需要创建一个父类的对象,再后面根据条件去把该对象实例化具体的某个子类,然后进行操作。
1950 0
|
安全 C#
C#中的匿名函数使用,类名&lt;T&gt;
C#中有个叫做“泛型”的集合,就是说只是个外壳,到底是int,string,bool还是什么类型,都可以按照自己的要求进行定义集合,所以我们用个“T"表示。
1048 0
|
C#
C# 反射 通过类名创建类实例
“反射”其实就是利用程序集的元数据信息。 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。 1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.
1174 0
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
202 3
|
6月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
199 3
|
20天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
30 3
|
1月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
114 0
|
2月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
45 2
|
2月前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
79 11