CSharp
文章平均质量分 94
公众号:技术译站
微信公众号:技术译站,公众号ID:ITTranslator,网站:https://ITTranslator.cn/
展开
-
Blazor 模板化组件开发指南
翻译自 Waqas Anwar 2021年4月15日的文章 《A Developer’s Guide To Blazor Templated Components》 1在我之前的一篇文章 Blazor 组件入门指南中,我介绍了组件参数,并向您展示了如何将数据作为参数传递给 Blazor 组件以定制化其功能。在这篇文章中,我将更进一步向您展示,如何将一个或多个 UI 模板作为参数传递给一个称之为模板化组件的不同类型的 Blazor 组件。下载源码2Blazor 模板化组件概述Blazor .翻译 2021-08-30 01:35:08 · 387 阅读 · 0 评论 -
Blazor 路由及导航开发指南
翻译自 Waqas Anwar 2021年4月2日的文章 《A Developer’s Guide To Blazor Routing and Navigation》 1检查传入的请求 URL 并将它们导航到对应的视图或页面是每个单页应用程序 (SPA) 框架的基本功能。Blazor Server 和 WebAssembly 应用程序也同样支持使用一些内置组件和服务进行路由。在本教程中,我将向您介绍在 Blazor 应用程序中实现路由所需了解的所有内容。Blazor 应用程序中的路由配置在开始为.翻译 2021-08-30 01:31:42 · 918 阅读 · 0 评论 -
Blazor 组件之间使用 EventCallback 进行通信
翻译自 Waqas Anwar 2021年3月28日的文章 《Communication between Blazor Components using EventCallback》 1Blazor 应用程序是相互交互的多个 Blazor 组件的集合,我们可以在其他父组件中使用子组件。在实际的应用程序中,将数据或事件信息从一个组件传递到另一组件是一种十分常见的场景。您可能会有一个页面,其中一个组件中发生的用户操作需要更新其他组件中的某些 UI。通常使用 EventCallback 委托来处理这种类.翻译 2021-08-10 13:22:09 · 675 阅读 · 0 评论 -
Blazor 事件处理开发指南
翻译自 Waqas Anwar 2021年3月25日的文章 《A Developer’s Guide To Blazor Event Handling》 1如果您正在开发交互式 Web 应用程序,根据不同的应用程序事件和用户操作动态更新用户界面是十分常见的做法。这些操作会触发事件,而作为开发人员,我们的工作是使用一些事件处理技术来处理这些事件。Blazor 内置支持处理多种事件,比如 onclick、onchange 和 onmousemove 等,并为开发者提供了处理这些事件的多种方式。我将在本.翻译 2021-08-03 15:22:43 · 399 阅读 · 0 评论 -
Blazor 数据绑定开发指南
翻译自 Waqas Anwar 2021年3月21日的文章 《A Developer’s Guide to Blazor Data Binding》 1现如今,大多数 Web 应用程序要么是在页面上显示某种数据,要么是使用表单从用户那里收集数据。这意味着每个 SPA 框架都必须支持数据绑定,以便开发者可以将数据与 label、form 控件等元素进行绑定。Blazor 组件内置了对数据绑定的支持,还使用了多种技术来同时支持单向和双向数据绑定。在本教程中,我将通过一个简单的卡片设计器示例来介绍 Bl.翻译 2021-07-26 15:27:10 · 384 阅读 · 0 评论 -
.NET Worker Service 部署到 Linux 作为 Systemd Service 运行
上一篇文章我们了解了如何将.NET Worker Service 作为 Windows 服务运行,今天我接着介绍一下如何将 Worker Service 部署到 Linux 上,并作为 Systemd Service 运行。我在本文中要覆盖的内容包含:作为 Linux 控制台程序运行作为 Systemd Service 运行开机自动启动、查看日志信息创建项目并发布下载 Worker Service 源码我将基于上一篇文章中的 Worker Service 源码来修改,如果您安装有 git,原创 2021-07-02 19:57:47 · 579 阅读 · 0 评论 -
.NET Worker Service 作为 Windows 服务运行及优雅退出改进
上一篇文章我们了解了如何为 Worker Service 添加 Serilog 日志记录,今天我接着介绍一下如何将 Worker Service 作为 Windows 服务运行。我曾经在前面一篇文章的总结中提到过可以使用 sc.exe 实用工具将 Worker Service 安装为 Windows 服务运行,本文中我就来具体阐述一下如何实现它。SC 是什么?sc.exe 是包含于 Windows SDK 的,可用于控制服务的命令行实用程序,它的命令对应于服务控制管理器(SCM)1 提供的函数。服务原创 2021-06-29 14:59:29 · 261 阅读 · 0 评论 -
.NET Worker Service 添加 Serilog 日志记录
前面我们了解了 .NET Worker Service 的入门知识1 和 如何优雅退出 Worker Service 2,今天我们接着介绍一下如何为 Worker Service 添加 Serilog 日志记录。在实际的生产环境中,应用程序中记录日志是非常宝贵的。在许多情况下,开发人员无法直接访问生产环境来调试问题。高质量的日志记录为解决线上问题提供了线索和依据。日志记录是将应用程序操作和状态记录到辅助接口的过程。.NET 日志记录框架.NET 中有很多默认的日志记录提供程序3,它们可以将日志输原创 2021-06-06 23:35:39 · 368 阅读 · 0 评论 -
.NET Worker Service 如何优雅退出
上一篇文章中我们了解了 .NET Worker Service 的入门知识1,今天我们接着介绍一下如何优雅地关闭和退出 Worker Service。Worker 类从上一篇文章中,我们已经知道了 Worker Service 模板为我们提供三个开箱即用的核心文件,其中 Worker 类是继承自抽象基类 BackgroundService 的,而 BackgroundService 实现了 IHostedService 接口。最终 Worker 类会被注册为托管服务,我们处理任务的核心代码就是写在 Wo原创 2021-05-18 13:58:57 · 257 阅读 · 0 评论 -
.NET 中的 Worker Service 入门介绍
翻译自 Steve Gordon 2020年3月30日的文章 《WHAT ARE .NET WORKER SERVICES?》 1随着 .NET Core 3.0 的发布,ASP.NET 团队引入了一个新的 Worker Service 项目模板,该模板作为 .NET SDK 的一部分发布。在本文中,我将向您介绍这个新模板,以及使用它开发的一些实际的服务示例。译者注:请先完成以下准备工作,以便于您理解本文。1、下载并安装最新的 .NET SDK:https://dotnet.microso.翻译 2021-05-10 00:45:53 · 275 阅读 · 0 评论 -
一图看懂 ASP.NET Core 中的服务生命周期
翻译自 Waqas Anwar 2020年11月8日的文章 《ASP.NET Core Service Lifetimes (Infographic)》 1ASP.NET Core 支持依赖关系注入(DI)软件设计模式,该模式允许我们注册服务、控制如何实例化这些服务并将其注入到不同的组件中。一些服务可以在短周期内实例化,并且仅在特定的组件和请求中可用;一些实例仅被实例化一次,并在整个应用程序生命周期中可用。这就是 ASP.NET Core 中可用的服务生命周期,共三种,下面我们来分别介绍一下。Si.翻译 2021-04-26 23:58:32 · 497 阅读 · 0 评论 -
创建支持依赖注入、Serilog 日志和 AppSettings 的 .NET 5 控制台应用
翻译自 Mohamad Lawand 2021年3月24日的文章 《.NET 5 Console App with Dependency Injection, Serilog Logging, and AppSettings》 1在本文中,我们将构建一个 .NET 5 控制台应用程序,该应用程序支持依赖注入、日志记录和 appsettings 配置。你也可以在 YouTube 上观看完整的视频2,还可以在 GitHub 上下载源代码3。我们要用到的开发工具有:Visual Studio C.翻译 2021-04-26 23:55:55 · 447 阅读 · 0 评论 -
Asp.Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step
翻译自 Mohamad Lawand 2021年1月25日的文章 《Refresh JWT with Refresh Tokens in Asp.Net Core 5 Rest API Step by Step》 1在本文中,我将向您演示如何在 Asp.Net Core REST API 中将 Refresh Token 添加到 JWT 身份验证。我们将覆盖的一些主题包含:Refresh Token、一些新的 Endpoints 功能和 JWT(JSON Web Token)。你也可以在 YouT.翻译 2021-04-15 20:04:33 · 610 阅读 · 0 评论 -
Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step
翻译自 Mohamad Lawand 2021年1月22日的文章 《Asp Net Core 5 Rest API Authentication with JWT Step by Step》在本文中,我将向您展示如何向我们的 Asp.Net Core REST API 添加 JWT 身份验证。我们将介绍的主题包含注册、登录功能以及如何使用 JWT (Json Web Tokens)和 Bearer 身份验证。你也可以在 YouTube 上观看完整的视频,还可以下载源代码。这是 API 开发系列.翻译 2021-04-15 19:53:23 · 306 阅读 · 0 评论 -
Asp.Net Core 5 REST API - Step by Step
翻译自 Mohamad Lawand 2021年1月19日的文章 《Asp.Net Core 5 Rest API Step by Step》 1在本文中,我们将创建一个简单的 Asp.Net Core REST API Todo 应用程序,在其中我们可以添加、编辑、删除和查看待办事项,并且将使用 SQLite 来存储数据。你也可以在 YouTube 上观看完整的视频2,还可以下载源代码3。这是 API 开发系列的第一部分,后面还有:Part 2:Asp.Net Core 5 REST A.翻译 2021-04-12 19:35:38 · 185 阅读 · 0 评论 -
在 .NET Core 5 中集成 Create React app
翻译自 Camilo Reyes 2021年2月22日的文章 《Integrate Create React app with .NET Core 5》 1Camilo Reyes 演示了如何将 Create React app 与 .NET Core 集成,以生成一个移除了几个依赖项的脚手架。Create React app 是社区中创建一个全新 React 项目的首选方式。该工具生成了基础的脚手架用于开始编写代码,并抽象出了许多具有挑战性的依赖项。webpack 和 Babel 之类的 Reac.翻译 2021-03-27 17:54:25 · 215 阅读 · 0 评论 -
C# 中的动态类型
翻译自 Camilo Reyes 2018年10月15日的文章 《Working with the Dynamic Type in C#》 1.NET 4 中引入了动态类型。动态对象使您可以处理诸如 JSON 文档之类的结构,这些结构的组成可能要到运行时才能知道。在本文中,Camilo Reyes 解释了如何使用动态类型。.NET 4.0 中引入的 dynamic 关键字为 C# 编程带来了一个范式转变。对于 C# 程序员来说,强类型系统之上的动态行为可能会让人感到不适 —— 当您在编译过程中失去类.翻译 2021-03-16 18:54:31 · 207 阅读 · 0 评论 -
在 .NET Core 中构建 REST API
翻译自 Camilo Reyes 2020年8月26日的文章 《Build a REST API in .NET Core》 1REST API 可以使用简单的动词(如 POST、PUT、PATCH 等)将大型解决方案背后的复杂性隐藏起来。在本文中,Camilo Reyes 解释了如何在 .NET Core 中创建 REST API。扩展大型复杂解决方案的一种方法是将它们分解为 REST 微服务。微服务开启了 API 背后的业务逻辑的可测试性和可重用性。因为 REST API 可以被多个客户端重用,.翻译 2021-03-16 18:50:42 · 186 阅读 · 0 评论 -
C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项
在 2020 年的最后一天,博客园发起了一个开源项目:基于 .NET 的博客引擎 fluss,我抽空把源码下载下来看了下,发现在属性的定义中,有很多地方都用到了 null!,如下图所示:这是什么用法呢?之前没有在项目中用过,所以得空就研究了一下。以前,! 运算符用来表示 “否”,比如不等于 !=。在 C# 8.0 以后,! 运算符有了一个新意义—— null 包容运算符,用来控制类型的可空性。要了解 null 包容运算符,首先就要了解可为 null 的引用类型。可为 null 的引用类型C# 8.原创 2021-01-12 19:18:31 · 614 阅读 · 0 评论 -
如何禁用控制台窗口的关闭按钮?
这是一段古老的代码,也是我以前经常用到的代码。虽然现在和以后基本上都不会再用到它了,但是在特定的场景中,它很好用。使用场景有时候,我们需要编写一个具有一定处理逻辑的控制台程序,这比编写 Windows 服务要简单一些。但是,我们要防止不小心点击到控制台窗口右上角的关闭按钮而导致程序非正常退出。于是就有了如这篇文章标题所述的一个简单的需求。代码实现查找 Windows 窗口和禁用 Windows 窗口的按钮,需要用到 Windows API FindWindow 、GetSystemMenu 和 Re原创 2021-01-12 19:16:18 · 487 阅读 · 0 评论 -
C# 中 ConcurrentDictionary 一定线程安全吗?
根据 .NET 官方文档的定义:ConcurrentDictionary<TKey,TValue> Class 表示可由多个线程同时访问的线程安全的键/值对集合。这也是我们在并发任务中比较常用的一个类型,但它真的是绝对线程安全的吗?仔细阅读官方文档,我们会发现在文档的底部线程安全性小节里这样描述:ConcurrentDictionary<TKey,TValue> 的所有公共和受保护的成员都是线程安全的,可从多个线程并发使用。但是,通过一个由 ConcurrentDictiona原创 2020-12-22 18:06:14 · 651 阅读 · 0 评论 -
C# 中的本地函数
今天我们来聊一聊 C# 中的本地函数。本地函数是从 C# 7.0 开始引入,并在 C# 8.0 和 C# 9.0 中加以完善的。引入本地函数的原因我们来看一下微软 C# 语言首席设计师 Mads Torgersen 的一段话:Mads Torgersen:我们认为这个场景是有用的 —— 您需要一个辅助函数。 您仅能在单个函数中使用它,并且它可能使用包含在该函数作用域内的变量和类型参数。 另一方面,与 lambda 不同,您不需要将其作为第一类对象,因此您不必关心为它提供一个委托类型并分配一个实际的原创 2020-11-24 17:55:06 · 667 阅读 · 0 评论 -
C# 中的数字分隔符 _
编写 C# 代码时,我们时常会用到很大的数字,例如下面定义的变量:const long loops = 50000000000;您能快速读出这是多少吗?是不是还是会有很多人把光标定位到最后一位,然后按键盘上的向左键一个一个往上数:个、十、百、千、万、十万、百万、千万、亿、十亿、百亿、千亿……数字的这种写法,严重影响了它的可读性。所以人们才会发明了诸如千分位之类的写法,上面的数字用千分位可以写作 50,000,000,000,这样子是不是可读性就强多了?不过这是西方人的写法。如果按照我们中国人的习原创 2020-11-17 19:24:35 · 562 阅读 · 0 评论 -
C# 9.0 正式发布了(C# 9.0 on the record)
翻译自 Mads Torgersen 2020年11月10日的博文《C# 9.0 on the record》 1,Mads Torgersen 是微软 C# 语言的首席设计师,也是微软 .NET 团队的项目群经理。C# 9.0 正式发布正式宣布:C# 9.0 发布了! 早在5月,我就写了一篇关于 C# 9.0 计划的博文 2,以下是该帖子的更新版本,以匹配我们最终实际交付的产品。对于 C# 的每一个新版本,我们都在努力让常见编码场景的实现变得更加清晰和简单,C# 9.0 也不例外。这次特别关注的.翻译 2020-11-13 16:10:32 · 452 阅读 · 0 评论 -
C# 8: 可变结构体中的只读实例成员
在之前的文章中我们介绍了 C# 中的 只读结构体(readonly struct)1 和与其紧密相关的 in 参数2。今天我们来讨论一下从 C# 8 开始引入的一个特性:可变结构体中的只读实例成员(当结构体可变时,将不会改变结构体状态的实例成员声明为 readonly)。引入只读实例成员的原因简单来说,还是为了提升性能。我们已经知道了只读结构体(readonly struct)和 in 参数可以通过减少创建副本,来提高代码运行的性能。当我们创建只读结构体类型时,编译器强制所有成员都是只读的(即没有实原创 2020-11-13 16:04:34 · 121 阅读 · 0 评论 -
C# 中的 in 参数和性能分析
in 修饰符也是从 C# 7.2 开始引入的,它与我们上一篇中讨论的 《C# 中的只读结构体(readonly struct)》1 是紧密相关的。in 修饰符in 修饰符通过引用传递参数。 它让形参成为实参的别名,即对形参执行的任何操作都是对实参执行的。 它类似于 ref 或 out 关键字,不同之处在于 in 参数无法通过调用的方法进行修改。ref 修饰符,指定参数由引用传递,可以由调用方法读取或写入。out 修饰符,指定参数由引用传递,必须由调用方法写入。in 修饰符,指定参数由引用传递,可原创 2020-11-05 18:10:11 · 153 阅读 · 0 评论 -
C# 中的只读结构体(readonly struct)
翻译自 John Demetriou 2018年4月8日 的文章 《C# 7.2 – Let’s Talk About Readonly Structs》1在本文中,我们来聊一聊从 C# 7.2 开始出现的一个特性 readonly struct。任一结构体都可以有公共属性、私有属性访问器等等。我们从以下结构体示例来开始讨论:public struct Person{ public string Name { get; set; } public string Surname .翻译 2020-10-29 19:44:58 · 660 阅读 · 0 评论 -
C# 8: 默认接口方法
翻译自 John Demetriou 2018年8月4日 的文章 《C# 8: Default Interface Methods》1,补充了一些内容C# 8 之前今天我们来聊一聊默认接口方法。听起来真的很奇怪,不是吗?接口仅用于定义契约。接口的实现类会拥有一组公共方法,不过实现类被赋予了以其自己的方式实现每个方法的自由。目前为止,如果我们还需要为这些方法中的一个或多个方法提供实现,我们将使用继承。如果我们希望这个类不是实现所有方法,而只是实现其中的一个子集,我们可以将这些方法和类本身抽象(abs.翻译 2020-10-22 17:03:34 · 290 阅读 · 0 评论 -
C# 中 System.Range 结构体
翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》我们之前讨论过的 C# 中的一个特性 System.Index 结构体1,与另一特性 System.Range 结构体 是携手并进的。在 C# 8.0 之前,没有访问集合中任意部分的范围或切片的语法。开发人员通常不得不执行一些自定义的切片操作,或者依靠诸如 array.Skip(5).Take(2); 的 LINQ 方法。现在 C# 添加了一个新的小特性,它可以帮助人们从一个大.翻译 2020-10-15 19:36:45 · 494 阅读 · 0 评论 -
C# 中 System.Index 结构体和 Hat 运算符(^)的全新用法
翻译自 John Demetriou 2019年2月17日 的文章 《C# 8 – Introducing Index Struct And A Brand New Usage For The Hat Operator》今天我们要讲的是 Hat 运算符(^)。目前为止,Hat 运算符(^)已经被用作布尔类型的异或运算符,以及字节、整型类型的按位异或运算符。在 C# 8 中,它有一个新的用法。这个运算符的新用法是自动创建 Index 结构体的实例。那什么是 Index 结构呢?这在 C# 8 中也有介.翻译 2020-10-13 20:18:03 · 375 阅读 · 0 评论 -
C# 中 Struct 和 Class 的区别总结
翻译自 Manju lata Yadav 2019年6月2日 的博文 《Difference Between Struct And Class In C#》,补充了一些内容和示例。结构体(struct)是类(class)的轻量级版本。结构体是值类型,可用于创建行为类似于内置类型的对象。比较结构体和类共享许多特性,但与类相比有以下局限性。结构体不能有默认构造函数(无参构造函数)或析构函数,构造函数中必须给所有字段赋值。public struct Coords{ public dou.翻译 2020-09-24 20:30:22 · 679 阅读 · 0 评论 -
使用 Visual Studio 2019 批量添加代码文件头
应用场景介绍在我们使用一些开源项目时,基本上都会在每个源代码文件的头部看到一段版权声明。一个项目或解决方案中源代码文件的个数少则几十,多则几千甚至更多,那么怎么才能给这么多文件方便地批量添加或者修改一致的文件头呢?在 2020 年 8 月 11 日 更新的 Visual Studio 2019 v16.7.1 版中,就加入了使用 EditorConfig 向现有文件、项目和解决方案添加文件头 这一功能。提到 EditorConfig, 那么:什么是 EditorConfig?EditorConfig原创 2020-09-05 09:31:25 · 922 阅读 · 0 评论 -
欢迎来到 C# 9.0(Welcome to C# 9.0)
翻译自 Mads Torgersen 2020年5月20日的博文《Welcome to C# 9.0》,Mads Torgersen 是微软 C# 语言的首席设计师,也是微软 .NET 团队的项目群经理。C# 9.0 正在成形,我想和大家分享一下我们对下一版本语言中添加的一些主要特性的想法。对于 C# 的每一个新版本,我们都在努力让常见编码场景的实现变得更加清晰和简单,C# 9.0 也不例外。这次特别关注的是支持数据模型的简洁和不可变表示。翻译 2020-08-30 01:51:58 · 639 阅读 · 0 评论 -
.NET - Task.Run vs Task.Factory.StartNew
翻译自 Stephen Toub 2011年10月24日的博文《Task.Run vs Task.Factory.StartNew》,Stephen Toub 是微软并行计算平台团队的首席架构师。在 .NET 4 中,Task.Factory.StartNew 是安排新任务的首选方法。它有许多重载提供了高度可配置的机制,通过启用设置选项,可以传递任意状态、启用取消,甚至控制调度行为。所有这些功能的另一面是复杂性。您需要知道什么时候使用哪个重载、提供什么调度程序等等。另外,Task.Factory.St.翻译 2020-08-25 20:07:38 · 357 阅读 · 0 评论