我们遵循.NET Framework标准事件模式的添加到类和结构中,.NET Framework 类库中的所有事件均基于 EventHandler 委托,定义如下: public delegate void...,但一般还是建议使用EventHandler委托,因为这是.NET Framework的标准实现。...标准里面主要有三个要素: 1. object sender: 声明事件成员的类。 2. EventArgs e: 所有订阅事件的对象可能关心的数据。...: public event CustomEventHandler RaiseCustomEvent; 但是如果使用泛型,可以不用自定义委托,可以直接声明发布类的事件成员: public event EventHandler... RaiseCustomEvent; 使用自定义 EventArgs 类和 EventHandler 作为事件类型来演示之前的步骤: public
The library targets .NET Standard and works on all .NET implementations....用中文说的话就是这个类提供了在生产者跟消费者之间异步传统数据的能力,简单来说可以认为是一个内存消息队列。...示例 1 下面是一个简单的示例,说明如何使用 Channel 类来创建一个生产者-消费者模型: static async Task Main(string[] args) {...这是一个非常重要使用模式。因为当我们使用消息队列的时候往往会有多个生产者跟多个消费者。我们可以通过控制生产者生产的速度来控制推入队列的数据量。...总结 Channel 类是 .NET CORE 3.0 后新加入的类。为我们提供了便利的生产者/消费者模式实现方案。相当于是一个进程内的内存队列,而且它没有持久化,纯内存操作,性能是非常非常高的。
引子: 时常会有这么一个疑惑,抽象类和接口功能好像,真正用起来该如何抉择呢?? 好问题。。 来看看书上怎么说的(C#7.0本质论) 虽然方法可在基类中声明为抽象成员,但是!!...如果都从一个基类派生,会用掉唯一的基类机会,(什么意思呢:也就是C#的单继承特性了),所以,什么都往基类里面加,就会显得特别臃肿,且不通用。 所以,原则就是:大共性你给我放基类,小共性用接口。...举个例子:一个动物基类(包含动物叫、动物吃放、动物睡觉) -- 这都没问题!!...但是你给动物的基类里面加一个动物飞行(虽然动物里面的鸟、鸡等都可以飞,但是喵和狗你怎么飞啊),所以,这个加的就很不理智,虽然也是个共性,但是个小共性。...;而剩下的则以接口出现,当然至于为什么要用接口,可以看上一篇关于抽象类的文章,道理差不多。
很多.net项目在开发的时候,.net core还没有出现或者还么有成熟,如今.netcore3.1已经出现,其技术风险已经比较低,今天对项目如何迁移到.net core做一个简单的梳理,瑾做参考。...Core 中MVC 和Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化 b) 比如:旧ASP.NET时代,写全局filter需要针对MVC 和Web API...分别编写代码,但在ASP.NET Core,直接使用一套中间件代码即可 6.可测试性 7.微服务、容器化支持 8.标准化 .NET API 规范- .NET STANDARD,整体架构如下图: .NET...项目分离(拷贝到新项目) 通过类名、命名空间,查询API的实现信息 迁移过程中,有类库命名空间被调整,nuget归属包被调整,具体类库在.NET Core哪个版本中被实现也不是很清楚,通过下面两个查询助手...地址:https://apisof.net/catalog/ 结果图如下: image.png image.png 类库项目、应用项目如何选择框架类型 1.如何组织一个同时面向多目标框架的 C# 项目解决方案
在前一篇博客《.NET Standard中配置TargetFrameworks输出多版本类库》中详细介绍了如何创建、配置、条件编译、引用本地程序集、NuGet方式引用程序集、XML文档输出、编码与DEBUG...所以在编写代码时,建议在项目文件.csproj文件中做如下配置: netstandard2.0;net45;net40NET 目标框架切换 .NET Standard 类库配置多目标框架后,添加引用时无法自动切换版本,必须手动调整配置顺序才可以。...比如我再LogUtils类中写了一个异步记录日志的方法,当切换到 .NET Standard 2.0 或者 .NET 4.5时编辑器没有给出错误的提示,说明代码在这两种框架下是受支持的。 ? ?...当切换到 .NET4.0 时,VS中自动给出了错误提示信息 ? 此时就可以使用条件编译符号来解决此问题 ?
成功的开源项目往往有着非常清晰的结构和标准化的管理方式。特别是在大型开源项目中,如何确保模块的标准化管理,如何让不同的开发者在协作中保持一致性,成为了项目成功的关键因素。...在这篇文章中,我将分享如何通过标准化模块管理,提升开源项目的可维护性、可扩展性,以及如何让更多开发者参与到项目中来,携手推动开源社区的进一步发展。...标准化模块设计的原则标准化模块设计的原则是开发高质量、易维护开源项目的核心。...如何管理依赖的原则随着开源项目的规模不断扩展,开发者通常会使用各种第三方库来实现某些特定功能。...通过使用虚拟环境,你可以:避免多个项目之间的依赖冲突。控制项目的 Python 版本以及该项目所需的库版本。
net core 框架下编译出的类库 主要提供汉字转拼音的功能。...使用 public static class Pinyin { public static string ConvertEncoding(string text, Encoding...wfs.Close(); } Html文件解析 1、AngleSharp 官网 http://anglesharp.github.io/ 简单使用
通过前面的两篇文章,我们已经知道如何创建新的项目,如何生成并运行我们的应用程序,也知道(大致) project.json 文件中的内容是什么意思。但大多数项目往往也需要多个项目或引用的类库。...我们要创建类库项目和应用程序项目。在应用程序中,如何引用我们的类库。...如何理解这个表格 如果一个类库指定.NET平台标准1.3版本,那么它仅能够运行在.NET Framework 4.6或更新的框架、Universal Windows Platform 10(UWP)、DNX...如果一个类库指定.NET平台标准1.3版本,那么它能够引用(原文:consume)所有来自之前的.NET平台标准的版本(1.2、1.1、1.0)。...如果我们想要我们的类库项目,也可以更广泛地使用,比如旧版本的.Net项目也可以用, 我们可以降低修改为 netstandard1.0,这意味着所有.Net 4.5 或更高版本的运行时兼容,再加上Windows
这其实就是今天要谈到的一个优化性能的Tips使用结构体替代类。 那么使用结构体替代类有什么好处呢?在什么样的场景需要使用结构体来替代类呢?今天的文章为大家一一解答。...那么如何验证我们的观点呢,其实BenchmarkDotNet提供了这样的指标展示,只需要引入BenchmarkDotNet.Diagnostics.WindowsNuget包,然后在需要评测的类上面加入以下代码...文章配图-结构体Cache.drawio 总结 在本文章中,我们讨论了如何使用结构体替换类,达到降低大量内存占用和提升几乎一半计算性能的目的。也讨论了非托管内存在.NET中的简单使用。...附录 本文源码链接[2]选择结构体还是类[3]结构体设计原则[4].NET Marshal类[5].NET Span类[6]CPU不同硬件的速度[7] 参考资料 [1] Marshal: https:...view=net-6.0 [6] .NET Span类: https://docs.microsoft.com/zh-cn/dotnet/api/system.span-1?
return cmd.ExecuteReader(CommandBehavior.CloseConnection); } } 需要注意的是返回结果集,因为在返回结果集的过程中,使用...调用中这样使用即可。
简介 NET 命令行接口 (CLI) 工具是用于开发、生成、运行和发布 .NET 应用程序的跨平台工具链。...本次主要介绍的是 dotnet new 命令,可以通过这个命令创建我们的自定义模板,我们安装完.NET SDK后,本身自带了一些项目模板,可以通过 dotnet new --list 查看已经安装的模板...接下来,我会介绍如何构建自定义的项目模板。...你可能很熟悉在.NET 中对单个项目进行打包,比如类库,可以在VS中直接对项目使用右键打包,也可以使用dotnet pack命令,不一样的是,我们需要打包的是整个项目结构,而不是单个项目。...安装并使用 在终端中运行 dotnet new --install Dy.Template 命令安装,安装成功后,应该可以看到下边的输出,里边包含了我们的自定义模板 运行 dotnet new Dy.Template
引言: 因为之前在项目开发中一直都是使用的Log4Net作为项目的日志记录框架,最近忽然感觉对它已经有点腻了,所以尝试着使用了NLog作为新项目的日志记录框架(当然作为一名有志向的攻城狮永远都不能只局限于眼前的技术...当然serilog也是一个不错的日志记录框架哟,不过今天主要还是要讲述的是NLog在项目中的配置和使用。...每个目标都有一组不同的参数,它们在项目主页上有详细描述,并且它们是上下文相关的。Intellisense也可以在Visual Studio中使用。...例如,File目标接受fileName定义输出文件名的参数,Console目标具有error参数,该参数确定诊断跟踪是否写入标准错误(stderr)而不是进程的标准输出(stdout)。...实际上创建自己的目标非常容易 - 请参阅如何编写自定义目标。 三、NLog使用: 在这里,我封装了一个NLog使用帮助类,提供给全站调用,这样就可以避免在不同的类中实例化Nlog对象的步骤。
generator-aspnet就是asp.net core的构建器了,我们需要安装它,由于它还依赖bower工具,所以我们要一起安装。...npm install -g bower npm install -g generator-aspnet 4.使用 Yeoman 使用之前我们先假设一下我们的项目叫YeomanDemo,我们先新建一个项目的根目录...YeomanDemo 使用Yeoman创建YeomanDemo Yeoman会显示一个界面让你去选择创建的项目的类型 ?...选中Empty Web Application项目之后回车 ? 接着输入项目名称 YeomanDemo 之后项目就创建成功了。 你可以执行以下命令,来运行项目。...5.总结 使用Yeoman只要几个简单的命令,就帮助我们建立一个项目,感兴趣的可以自己编写一个generator玩玩
ASP.NET使用SqlTransaction处理事务操作 SqlTransaction类是对SQL Server数据库进行事务处理的类,该类的实例由SqlConnection类实例的BeginTransaction...方法创建,表示在该数据库连接实例上开始一个数据库事务,创建SqlTransaction类实例后,在程序中使用该实例的Commit方法提交事务,或者使用该类的Rollback方法回滚事务。...此示例演示如何使用BeginTransaction、Commit 和 Rollback 等方法。出现任何错误时事务都会回滚。Try/Catch 错误处理用于处理尝试提交或回滚事务时的所有错误。...transaction.Rollback(); } } } 注意:在提交或回滚 SqlTransaction 时,应始终使用
Rest是一种设计风格,不是一个标准。 Rest通常使用HTTP,URI,XML,HTML等流行的协议和标准。 Rest是从资源的角度来观察网络的,而资源是由URI来指定的。...Rest使用的是HTTP协议,因此是无状态的。 Rest在Asp.Net Mvc中的使用 第一步:先来创建一个Asp.Net Mvc3.0的Web项目。 ...第二步:创建一个类库,然后添加一个接口和实现。 ...="true"/> system.serviceModel> 第三步:在Global.asax.cs中添加Rest路由 先修改原路由代码 public static void...总结 以上就是asp.net mvc 中如何调用Rest服务的两种方式。看起来很是很简单的, 我也只是很简单的实现了调用,当然需要优化的地方还是很多的。
本文将详细讲解如何在 .NET 框架下使用 PaddleOCRSharp 实现 OCR 功能,包括环境配置、代码示例和实际应用案例。一、什么是 PaddleOCR 和 PaddleOCRSharp?...安装 PaddleOCRSharp在你的项目中,使用以下命令安装 PaddleOCRSharp NuGet 包:dotnet add package PaddleOCRSharp或者通过 Visual...三、代码实现下面以 C# 为例,展示如何使用 PaddleOCRSharp 在 .NET 框架下实现 OCR 功能。1....六、总结本文的介绍,如何在 .NET 框架下使用 PaddleOCRSharp 实现 OCR 功能。从环境配置到代码实现,再到优化和实际应用,完整覆盖了 OCR 开发的主要步骤。...在未来,OCR 技术将随着 AI 的发展继续进化,而 .NET 开发者可以通过 PaddleOCRSharp 快速构建功能丰富的文本识别应用,为项目增添强大的智能化能力。
NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget...从运维角度,可在不影响老版本的情况下发布新版本,可统一管理公司各个项目中组件版本不一和各个版本组件的使用情况,减少故障发生以并使得项目稳定运行。...这些在.NET Core项目里却很简单,只需要使用命令行dotnet pack,在.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门 做了简要介绍,下面我们来详细介绍下这个命令...dotnet pack --no-build --output nupkgs 打包当前的项目到指定的文件夹中,并跳过生成步骤 回到我们在.NET Core系列 :3 、使用多个项目 创建的类库项目DotnetNewLib...这意味着,我们 NuGet 包只适用于.Net Core 应用程序 针对 NetStandard1.6 (和即将到来的 4.6.3),文章 拥抱.NET Core,如何开发一个跨平台类库 (1) 对Nuget
让我们先分析项目的包依赖项。...推荐使用 VS extension for SARIF Viewer 可以更好的查看分析结果....分析项目依赖项后,运行以下命令以开始升级项目: upgrade-assistant upgrade 上一个命令将生成 CElF 格式的报告...,该报告基于 JSON 格式,可使用以下查看器查看: 任何文本编辑器。...推荐使用 CLEF-tool (查询CLEF格式的日志文件的方便的命令行应用程序) 该工具还支持其他选项。有关完整的工具使用情况信息,请参阅 GitHub 上的 升级助手自述文件。
前言 本次主要是使用WCF的多层架构。我们将建立以下项目: ? ...A,MVC网站项目 MvcOperation:留言簿表现层 B,类库项目 Contract:定义数据访问服务的契约 C,类库项目 Service:定义数据访问服务 D,类库项目Entity:留言簿实体... E,控制台项目Host:承载数据访问服务 项目之间的引用如下: A引用B和D; B引用D和System.ServiceModel程序集 C引用B、D、System.ServiceModel以及...数据访问服务契约 首先我们可以定义出留言簿数据访问服务的契约(接口),把如下的代码保存为IDataAccess.cs放在Contract类库项目中: using System; using System.Collections.Generic...ASP.NET MVC!"