C#.NET 专栏
文章平均质量分 90
专注C#.NET技术分享与学习交流
吉特思米(gitusme)
Coding life, Coding world, Coding feature.
展开
-
【微软技术栈】.NET(C#)API 开发中的六边形体系结构
在软件开发领域,架构师和工程师不断努力创建不仅高效,而且可维护和适应性强的系统。近年来,为实现这些目标而流行的一种架构模式是六边形架构,也称为端口和适配器。在本文中,我们将探讨六边形架构的原则,并通过实际示例演示如何将其应用于 .NET (C#) API 开发。在解决方案中,为核心层创建一个新项目。此项目应包含您的业务逻辑、域实体和用例。例如,让我们创建一个具有“Product”实体和“ProductService”类的简单电子商务应用程序。set;set;set;原创 2023-12-17 11:42:15 · 175 阅读 · 0 评论 -
【精华帖】发布你造的轮子 -- 创建Nuget包(分布操作)
部署用于全球分发的 Nuget 包很容易,但也很容易意外部署损坏的包,因为测试是你的责任。请确保你有一个可靠的测试过程,以便在发布包后立即下载和验证包,以确保你的用户有一个出色且无错误的体验。原创 2023-12-08 08:04:14 · 317 阅读 · 0 评论 -
【微软技术栈】与其他.NET语言的互操作性 (C++/CLI)
本节中的主题介绍如何在 Visual C++ 中创建程序集,这些程序集使用或提供以 C# 或 Visual Basic 编写的程序集的功能。原创 2023-12-05 07:55:48 · 607 阅读 · 0 评论 -
【微软技术栈】数据并行和任务并行中的潜在缺陷
例如,如果要使用并行循环来计算随后应在 UI 控件中呈现的某些数据,则应考虑在任务实例内执行循环,而不是直接在 UI 事件处理程序中执行。如果尝试从在 UI 线程上执行的并行循环内更新 UI 控件,将可能会导致状态损坏、异常、更新延迟甚至死锁,具体将取决于 UI 更新的调用方式。在下面的示例中,在所有的迭代完成之前,并行循环将阻止它在其上执行的 UI 线程。在嵌套的循环中,最有可能发生过度并行化的情况。在某些情况下,任务并行库将对任务进行内联操作,这意味着它将在当前正在执行的线程上的任务上运行。原创 2023-12-01 08:32:15 · 446 阅读 · 0 评论 -
【微软技术栈】基于任务的异步编程
大多数应用程序或库开发人员并不关心任务在哪个处理器上运行、任务如何将其工作与其他任务同步以及如何在中计划任务。他们只需要它在主机上尽可能高效地执行。如果需要对计划细节进行更细化的控制,可以使用 TPL 在默认任务计划程序上配置一些设置,甚至是提供自定义计划程序。建议不要从或继承。相反,我们建议你使用AsyncState属性将其他数据或状态与Task或对象相关联。还可以使用扩展方法扩展Task和类的功能。有关扩展方法的详细信息,请参阅扩展方法和扩展方法。如果必须从Task或继承,则不能使用Run或或。原创 2023-11-30 12:49:26 · 652 阅读 · 0 评论 -
【微软技术栈】实现EAP(基于事件的异步模式)
如果要编写的类有一些可能会带来明显延迟的操作,请考虑按照中的步骤操作,为它实现异步功能。基于事件的异步模式提供了打包具有异步功能的类的标准化方式。如果使用帮助程序类(如)进行实现,类可以在任何应用模型(包括 ASP.NET、控制台应用和 Windows 窗体应用)下正常运行。对于简单的异步操作,可能会发现组件非常适合。以下列表介绍本主题中讨论的基于事件的异步模式的功能。实现基于事件的异步模式的时机命名异步方法选择性地支持取消选择性地支持 IsBusy 属性选择性地为进度报告提供支持。原创 2023-11-28 12:43:16 · 254 阅读 · 0 评论 -
【微软技术栈】与其他异步模式和类型互操作
C#异步编程,与其他异步模式和类型互操作原创 2023-11-25 13:26:19 · 575 阅读 · 0 评论 -
【微软技术栈】使用(TAP)基于任务的异步模式
c#使用基于任务的异步模式 (TAP) 处理异步操作时,可以使用回叫实现等待,而不会阻塞。对于任务,这可通过等方法实现。通过允许在正常控制流中等待异步操纵,基于语言的异步支持可隐藏回叫,并且编译器生成的代码可提供此相同 API 级别的支持。原创 2023-11-24 08:32:28 · 1003 阅读 · 1 评论 -
【微软技术栈】实现TAP(基于任务的异步模式)
可使用以下三种方式实现基于任务的异步模式 (TAP):使用 Visual Studio 中的 C# 和 Visual Basic 编译器、手动实现或编译器和手动方法相结合。以下各节详细地讨论了每一种方法。可以使用 TAP 模式实现计算密集型和 I/O 密集型异步操作。部分介绍了各种类型的操作。原创 2023-11-23 07:59:29 · 300 阅读 · 0 评论 -
【微软技术栈】使用新的C#功能减少内存分配
如果类型很小,只有三个字或更少(考虑到一个字的自然大小为一个整数),则复制值的成本可以忽略不计。它是可衡量的,可以对较大的类型产生真正的性能影响。在实现这些增强功能之前,开发人员需要求助于具有指针和原始内存的构造,以实现相同的性能影响。在类型中,该值是该类型的实例的内容。在类型中,该值是对存储该类型实例的内存块的引用。C# 包含表达式规则,以确保在表达式引用的存储不再有效的情况下无法访问表达式。在类型中,引用指向包含对内存块的引用的存储。相反,以下代码会发出错误,因为 的成员引用了堆栈分配的整数数组。原创 2023-11-22 07:48:36 · 457 阅读 · 0 评论 -
【微软技术栈】C#.NET 内置数值转换
C# 提供了一组和数值类型。任何两种数值类型之间都可以进行隐式或显式转换。必须使用来执行显式转换。原创 2023-11-21 08:10:41 · 277 阅读 · 0 评论 -
【微软技术栈】C#.NET 元组类型
元组功能提供了简洁的语法来将多个数据元素分组成一个轻型数据结构。如前面的示例所示,若要定义元组类型,需要指定其所有数据成员的类型,或者,可以指定。元组类型支持==和!。有关详细信息,请参阅部分。元组类型是;元组元素是公共字段。这使得元组为可变的值类型。原创 2023-11-20 08:08:02 · 298 阅读 · 0 评论 -
【微软技术栈】C#.NET 中的管道操作
C#.NET 管道为进程间通信提供了平台。管道分为两种类型:匿名管道。匿名管道在本地计算机上提供进程间通信。与命名管道相比,虽然匿名管道需要的开销更少,但提供的服务有限。匿名管道是单向的,不能通过网络使用。仅支持一个服务器实例。匿名管道可用于线程间通信,也可用于父进程和子进程之间的通信,因为管道句柄可以轻松传递给所创建的子进程。在 .NET 中,可通过使用和类来实现匿名管道。命名管道。命名管道在管道服务器和一个或多个管道客户端之间提供进程间通信。命名管道可以是单向的,也可以是双向的。原创 2023-11-19 07:45:00 · 985 阅读 · 0 评论 -
【微软技术栈】C#.NET 泛型中的协变和逆变
协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型 。 泛型类型参数支持协变和逆变,可在分配和使用泛型类型方面提供更大的灵活性。原创 2023-11-16 07:45:00 · 235 阅读 · 0 评论 -
【微软技术栈】C#.NET 内存映射文件
内存映射文件包含虚拟内存中文件的内容。 借助文件和内存空间之间的这种映射,应用(包括多个进程)可以直接对内存执行读取和写入操作,从而修改文件。 可以使用托管代码访问内存映射文件,就像本机 Windows 函数访问内存映射文件(如管理内存映射文件中所述)一样。原创 2023-11-17 07:45:00 · 561 阅读 · 0 评论 -
【微软技术栈】C#.NET 异步文件 I/O
异步操作使您能在不阻塞主线程的情况下执行占用大量资源的 I/O 操作。 在 Windows 8.x 应用商店应用或桌面应用中一个耗时的流操作可能阻塞 UI 线程并让应用看起来好像不工作时,这种性能的考虑就显得尤为重要了。原创 2023-11-18 07:45:00 · 207 阅读 · 0 评论 -
【微软技术栈】C#.NET 中的泛型
借助泛型,你可以根据要处理的精确数据类型定制方法、类、结构或接口。 例如,不使用允许键和值为任意类型的Hashtable类,而使用Dictionary\u003CTKey,TValue>泛型类并指定允许的密钥和值类型。 泛型的优点包括:代码的可重用性增加,类型安全性提高。原创 2023-11-14 07:45:00 · 213 阅读 · 0 评论 -
【微软技术栈】C#.NET 泛型数学
本文内.NET 7 为基类库引入了新的数学相关泛型接口。 提供这些接口意味着可以将泛型类型或方法的类型参数约束为“类似于数字”。 此外,C# 11 及更高版本允许定义static virtual接口成员。 由于必须将运算符声明为static,因此这一新的 C# 功能可用于在新接口中为类似于数字的类型声明运算符。原创 2023-11-15 07:45:00 · 301 阅读 · 1 评论 -
【微软技术栈】C#.NET 异常的最佳做法
设计良好的应用处理异常和错误以防止应用崩溃。 本文描述处理和创建异常的最佳做法。原创 2023-11-13 08:06:18 · 310 阅读 · 0 评论 -
【微软技术栈】C#.NET 如何使用本地化的异常消息创建用户定义的异常
在本文中,你将了解如何通过使用附属程序集的本地化异常消息创建从Exception基类继承的用户定义异常。原创 2023-11-12 22:20:22 · 426 阅读 · 0 评论 -
【微软技术栈】C#.NET 中的正则表达式最佳做法
.NET 中的正则表达式引擎是一种功能强大而齐全的工具,它基于模式匹配(而不是比较和匹配文本)来处理文本。 在大多数情况下,它可以快速、高效地执行模式匹配。 但在某些情况下,正则表达式引擎的速度似乎很慢。 在极端情况下,它甚至看似停止响应,因为它会用若干个小时甚至若干天处理相对小的输入。本文概述开发人员为了确保其正则表达式实现最佳性能可以采纳的一些最佳做法。原创 2023-11-08 20:17:41 · 246 阅读 · 0 评论 -
【微软技术栈】C#.NET 中使用依赖注入
本文介绍如何在 .NET 中使用依赖注入 (DI)。 借助 Microsoft 扩展,可通过添加服务并在IServiceCollection中配置这些服务来管理 DI。IHost接口会公开IServiceProvider实例,它充当所有已注册的服务的容器。原创 2023-11-12 10:06:22 · 1134 阅读 · 0 评论 -
【微软技术栈】C#.NET 依赖项注入
.NET 支持依赖关系注入 (DI) 软件设计模式,这是一种在类及其依赖项之间实现控制反转 (IoC)的技术。 .NET 中的依赖关系注入是框架的内置部分,与配置、日志记录和选项模式一样。原创 2023-11-11 10:30:00 · 982 阅读 · 0 评论 -
【微软技术栈】C#.NET 正则表达式源生成器
正则表达式 (regex) 是一个字符串,它使开发人员能够表达要搜索的模式,使其成为搜索文本和提取结果作为已搜索字符串子集的一种很常见的方法。 在 .NET 中,System.Text.RegularExpressions命名空间用于定义Regex实例和静态方法,并匹配用户定义的模式。 本文介绍如何使用源生成来生成Regex实例以优化性能。原创 2023-11-10 11:30:00 · 559 阅读 · 0 评论 -
【微软技术栈】C#.NET 正则表达式
正则表达式提供了功能强大、灵活而又高效的方法来处理文本。 正则表达式丰富的泛模式匹配表示法使你可以快速分析大量文本,对于处理字符串或分析大文本块的许多应用程序而言,正则表达式是不可缺少的工具。原创 2023-11-09 11:30:00 · 169 阅读 · 0 评论 -
【微软技术栈】C#.NET 开发全球通用应用程序的最佳做法
本节描述在开发全球通用的应用程序时应遵循的最佳做法。原创 2023-11-08 10:30:00 · 250 阅读 · 0 评论 -
【微软技术栈】C#.NET 中的本地化
本地化是针对应用支持的每个区域性,将应用资源转换为本地化版本的过程。 只有在完成本地化评审步骤,以验证全球化应用是否做好本地化准备后,才应继续执行本地化步骤。可以开始进行本地化的应用程序分为两个概念块:一个是包含所有用户界面元素的块,另一个是包含可执行代码的块。原创 2023-11-07 10:00:00 · 704 阅读 · 0 评论 -
【微软技术栈】C#.NET 全球化和 ICU
在 .NET 5 前,.NET 全球化 API 在不同的平台上使用不同的基础库。 在 Unix 上,API 使用Unicode 国际组件 (ICU),在 Windows 上,API 使用区域语言支持 (NLS)。 这导致在不同平台上运行应用程序时,在少数全球化 API 中存在一些行为差异。原创 2023-11-06 09:30:00 · 292 阅读 · 0 评论 -
【微软技术栈】C#.NET 全球化
本文将讨论在全球化应用中处理字符串、日期和时间值以及数值时,应考虑的一些主要问题和遵从的最佳做法。原创 2023-11-05 11:00:00 · 402 阅读 · 0 评论 -
【微软技术栈】C#.NET 中 TLS/SSL 最佳做法
TLS(传输层安全性)是一种加密协议,旨在保护两台计算机之间通过 Internet 的通信。 TLS 协议通过SslStream类在 .NET 中公开。\n\n本文介绍在客户端和服务器之间设置安全通信的最佳做法,并假定使用 .NET。原创 2023-11-03 07:54:34 · 859 阅读 · 0 评论 -
【微软技术栈】C#.NET 中的 WebSocket支持
WebSocket 协议支持客户端与远程主机之间的双向通信。System.Net.WebSockets.ClientWebSocket公开了通过握手建立 WebSocket 连接的功能,它由ConnectAsync方法创建和发送。原创 2023-11-02 12:43:03 · 304 阅读 · 0 评论 -
【微软技术栈】C#.NET 使用 TcpClient 和 TcpListener
对于高级用户,强烈建议使用Socket类,而不是TcpClient和TcpListener。若要使用传输控制协议 (TCP),有两个选项:使用Socket以获得最大控制和性能,或使用TcpClient和TcpListener帮助程序类。TcpClient和TcpListener是在System.Net.Sockets.Socket类的基础上建立的,并负责传输数据的详细信息以便于使用。原创 2023-11-01 23:02:36 · 963 阅读 · 0 评论 -
【微软技术栈】C#.NET 使用套接字通过 TCP 发送和接收数据
必须先使用协议和网络地址信息初始化套接字,然后才能使用套接字与远程设备进行通信。Socket类的构造函数包含的参数可以指定地址系列、套接字类型,以及套接字用于建立连接的协议类型。 将客户端套接字连接到服务器套接字时,客户端将使用IPEndPoint对象来指定服务器的网络地址。原创 2023-10-30 18:25:35 · 417 阅读 · 0 评论 -
【微软技术栈】C#.NET 使用 HttpClient 类发出 HTTP 请求
本文介绍如何使用HttpClient类发出 HTTP 请求和处理响应。原创 2023-10-29 08:48:23 · 828 阅读 · 0 评论 -
【微软技术栈】C#.NET HttpClient 的使用准则
System.Net.Http.HttpClient类用于发送 HTTP 请求以及从 URI 所标识的资源接收 HTTP 响应。HttpClient实例是应用于该实例执行的所有请求的设置集合,每个实例使用自身的连接池,该池将其请求与其他请求隔离开来。 从 .NET Core 2.1 开始,SocketsHttpHandler类提供实现,使行为在所有平台上保持一致。原创 2023-10-28 11:32:13 · 276 阅读 · 0 评论 -
【微软技术栈】C#.NET 分部类和方法
拆分一个类、一个结构、一个接口或一个方法的定义到两个或更多的文件中是可能的。 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。原创 2023-10-27 22:12:30 · 213 阅读 · 1 评论 -
【微软技术栈】C#.NET 对象和集合初始值设定
使用对象初始值设定项,你可以在创建对象时向对象的任何可访问字段或属性分配值,而无需调用后跟赋值语句行的构造函数。 利用对象初始值设定项语法,你可为构造函数指定参数或忽略参数。原创 2023-10-26 12:04:20 · 237 阅读 · 0 评论 -
【微软技术栈】C#.NET 字符串
在 C# 中,string关键字是String的别名。 因此,String和string是等效的(虽然建议使用提供的别名string),因为即使不使用using System;,它也能正常工作。String类提供了安全创建、操作和比较字符串的多种方法。 此外,C# 语言重载了部分运算符,以简化常见字符串操作。还可以使用开源库 Com.Gitusme.Net.Extensiones.Core 提高您的编程效率。原创 2023-10-24 08:00:00 · 291 阅读 · 0 评论 -
【微软技术栈】C#.NET 类型参数的约束
约束指定类型参数的功能和预期。 声明这些约束意味着你可以使用约束类型的操作和方法调用。 如果泛型类或方法对泛型成员使用除简单赋值之外的任何操作或调用System.Object不支持的任何方法,则将对类型参数应用约束。原创 2023-10-25 22:52:04 · 214 阅读 · 1 评论 -
【微软技术栈】C#.NET 扩展方法
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种静态方法,但可以像扩展类型上的实例方法一样进行调用。原创 2023-10-22 23:12:07 · 152 阅读 · 1 评论