C#
文章平均质量分 82
David Hongyu
专注于Java/C#/C++的技术分享
展开
-
C# 内置数据结构类及其底层详解(1)--基于循环数组的队列Queue
引言日常开发中,List<>,Dictionary<>,LinkedList<>等几乎信手拈来,为什么有的类增删改慢,而索引查询快?有的却刚好相反?底层的机制是什么?本文将介绍第一种:QueueQueue<T> 类定义:即队列,是一种表示对象的先进先出集合。三个主要操作: Enqueue将一个元素添加到的末尾Queue<T>。 Dequeue从的开头移除最旧的元素Queue<T>。 ...原创 2021-02-02 13:48:58 · 1318 阅读 · 0 评论 -
谈谈.NET/C#开发者的爱与恨
前言先说说对于如今程序员圈中的对于.net技术爱恨交织的一种现象。首先来说“恨”。从收入上看,在国内,.NET 开发者的平均薪资水平在JAVA,C/C++,Python等主流开发语言中是倒数的水平。这里特别拿Java来对比一下,Java与C#语法十分相近,因而许多C#程序员都会去转Java,Java在国内的生态与市场占有率远高于C#,主流打大公司如BTA等都会使用Java/c/c++作...原创 2020-04-16 20:50:20 · 307 阅读 · 1 评论 -
谈谈C#中的异步编程模型(解读C#微软官方文档)
前言这是我博客中的第三篇异步编程笔记,前面两篇分别从.NET CORE以及EF CORE的角度去解读C#中的异步编程以及一些默认的规范,如何你需要的特定领域的异步编程知识,请移步谈谈EFCORE中的异步编程规范,以及谈谈.NET CORE中的异步编程。本文将更为系统的讲解C#中异步编程模型概念。异步编程模型请看如下代码async Task<int> AccessTheWebAsync(){ var client = new HttpClient(); clie原创 2020-05-16 21:24:51 · 587 阅读 · 0 评论 -
谈谈C#中的特性:在.net core中的应用
前言在ASP.NET CORE mvc中,我们在过滤器的注册方式上,常用方法之一就是在Action上以特性的标注的方式进行注册,如以下形式:[AuthonizationFilter()] public IActionResult Index() { return View(); }这其中的[AuthonizationFilter()]就是特性。所以在C#中特性究竟是怎样一种机制?本文将对此进行探讨。什么是特性?来看看微软官方对于C#中特性的定义:使用特原创 2020-05-12 21:27:38 · 685 阅读 · 0 评论 -
谈谈C# 8.0 的默认接口方法
本文转载自我敬仰的微软大佬杨旭:https://www.cnblogs.com/cgzl/p/11768226.html例子直接看例子有这样一个接口:然后有三个它的实现类:然后在main方法里面调用:截至目前,程序都可以成功的编译和运行。IPerson接口变更突然,我想对所有的人类添加一个新的特性,例如,添加一个自我介绍的方法,所以我在IPerson里添...转载 2020-04-15 20:58:36 · 390 阅读 · 0 评论 -
谈谈C#中的基于反射机制的依赖注入
反射 Reflection反射:你给我一个对象,我能在不用 new 操作符也不知道该对象的静态类型的情况下,我能给你创建出一个同类型的对象,还能访问该对象的各个成员。这相当于进一步的解耦,因为有 new 操作符后面总得跟类型,一跟类型就有了紧耦合的依赖。依靠反射创建类型不再需要 new 操作符也无需静态类型,这样使得很多时候耦合可以松到忽略不计。反射不是 C# 语言的功能,而是 ...原创 2020-03-19 15:07:31 · 2050 阅读 · 0 评论 -
谈谈C#中的接口隔离
接口隔离接口即契约:甲方“我不会多要”;乙方“我不会少给”。 乙方不会少给:硬性规定,即一个类只要实现了接口,就必需实现接口里面的所有方法,一旦未全部实现,类就还只是个抽象类,任然不能实例化 甲方不会多要:软性规定,是个设计问题胖接口及其产生原因观察传给调用者的接口里面有没有一直没有调用的函数成员,如果有,就说明传进来的接口类型太大了。换句话说,这个“胖”接口是由两个或两个以...原创 2020-03-18 23:09:50 · 524 阅读 · 0 评论 -
谈谈C#中的类型、变量与对象
什么是类型 Type 又名数据类型(Data Type) A data type is a homogeneous collection of values, effectively presented, equipped with a set of operations which manipulate these values. 是数据在内存中存储时的“型号” 小内存容纳大尺寸数...原创 2020-03-17 23:01:20 · 423 阅读 · 0 评论 -
谈谈C#中的抽象类,接口以及开闭原则
在C#高级程序设计中,接口和抽象类既是理论难点,又是代码难点。接口和抽象类用得好,写出来的代码才好测试。引言软件也是工业的分支,设计严谨的软件必须经得起测试。软件能不能测试、测试出问题后好不好修复、软件整体运行状态好不好监控,都依赖于对接口和抽象类的使用。接口和抽象类是现代面向对象的基石,也是高阶面向对象程序设计的起点。学习设计模式的前提:透彻理解并熟练使用接口和抽象类 深入理解...原创 2020-03-05 16:54:38 · 338 阅读 · 1 评论 -
dotNET Core:编码规范
在项目开发过程中,由于时间紧、任务重,很容易导致面向功能编程。实现相同的功能,代码可以写的很优雅,也可以写的很晦涩和复杂。现在的工作,都需要进行团队协作,代码就需要有一定的规范进行指引,因为我们需要写出让人可以轻易读懂的代码,而不仅仅是机器。规范没有绝对的标准,遵循大部分人都认可的一种方式就可以了,保持统一。比如在 dotNET Core 中,我们可以参考下 dotNET Core 的源码,最终制定一个适合团队的规范即可。下面是我理解的正确的一些规范:基本准则1、命名的规范分为两种:Pasc转载 2020-10-19 20:45:13 · 434 阅读 · 0 评论 -
写好C#代码的技巧
前言C#已从C#5更改为C#6,为使项目更具可读性,基于最佳标准的实践也得到了发展。本指南系列的目的是帮助您为在团队环境中运行的C#项目和.NET Framework应用程序编写更简洁的代码。在团队环境下,编写好的代码对开发人员可能更容易,因为编写的代码将由团队中其他开发人员使用,管理和更新,而代码质量往往取决于您个人团队的“哲学”和开发人员的编码实践。在这种情况下,最好的方法是遵循编码团队的准则,并为应用程序项目中的C#程序添加设计和风格,以使它们对读者更好。请注意,C#编译器并不关心您放入代转载 2020-10-14 20:04:23 · 412 阅读 · 0 评论 -
面试官:工作3年,你连 .NET 内存泄露都不知道?
原文连接:https://michaelscodingspot.com/ways-to-cause-memory-leaks-in-dotnet/作者 Michael Shpilt。授权翻译,转载请保留原文链接。任何有经验的.NET开发人员都知道,即使.NET应用程序具有垃圾回收器,内存泄漏始终会发生。并不是说垃圾回收器有bug,而是我们有多种方法可以(轻松地)导致托管语言的内存泄漏。内存泄漏是一个偷偷摸摸的坏家伙。很长时间以来,它们很容易被忽视,而它们也会慢慢破坏应用程序。随着..转载 2020-10-08 19:55:11 · 244 阅读 · 0 评论 -
在 ASP.NET Core 中将依赖项注入到视图
ASP.NET Core 支持将依赖关系注入到视图。这对于视图特定服务很有用,例如仅为填充视图元素所需的本地化或数据。应尽量在控制器和视图之间保持问题分离。视图显示的大部分数据应该从控制器传入。配置注入appsettings.json** 值可以直接注入到视图。appsettings.json** 文件示例:{ "root": { "parent": { "child": "myvalue" } }}@inject的语法:...转载 2020-09-24 14:35:35 · 172 阅读 · 0 评论 -
第三方平台一键发布视频至抖音:基于.NET CORE
前言既上次介绍了如何通过.net core控制台应用一键发布公众号消息后,这次来介绍一下,如何通过.net core 控制台应用一键发布视频内容至抖音,可以作为第三方分享内容至抖音的服务端方法参考,官方的示例没有提供C#的代码,并且文档也超级坑,api设计也很不友好,返回的错误码并不能真正反映问题所在,总之就是不够restful。。。这个坑我觉得比微信的文档还大。。废话不多说,开始吧开发流程(1)申请并成功配置应用这里我就不多介绍了,参考这一篇博客:https://blog.csdn.net原创 2020-09-15 15:08:28 · 5847 阅读 · 3 评论 -
.NET Core 下的爬虫利器
爬虫大家或多或少的都应该接触过的,爬虫有风险,抓数需谨慎。本着研究学习的目的,记录一下在 .NET Core 下抓取数据的实际案例。爬虫代码一般具有时效性,当我们的目标发生改版升级,规则转换后我们写的爬虫代码就会失效,需要重新应对。抓取数据的主要思路就是去分析目标网站的页面逻辑,利用xpath、正则表达式等知识去解析网页拿到我们想要的数据。本篇主要简单介绍三个组件的使用,HtmlAgilityPack、AngleSharp、PuppeteerSharp,前两个可以处理传统的页面,无法抓取单页应用,如转载 2020-09-14 11:45:47 · 1406 阅读 · 0 评论 -
ASP.NET Core MVC 和 Razor Pages中间件顺序
下图显示了 ASP.NET Core MVC 和 Razor Pages 应用的完整请求处理管道。你可以在典型应用中了解现有中间件的顺序,以及在哪里添加自定义中间件。你可以完全控制如何重新排列现有中间件,或根据场景需要注入新的自定义中间件。...转载 2020-09-10 10:56:14 · 1094 阅读 · 0 评论 -
.NET Core集成JWT认证
JWT(Json web token)就不用过多的介绍了,在.NET Core开发中使用JWT进行认证也是比较常见的,而且接入过程也比较简单,随便配置配置就好了。要想使用JWT,仅仅只需要在项目中引用微软的一个认证组件。Install-Package Microsoft.AspNetCore.Authentication.JwtBearer然后将一些敏感数据可以放在配置文件appsettings.json中。{ "JWT": { "ClockSkew": 10,转载 2020-09-08 10:21:51 · 789 阅读 · 1 评论 -
百度人脸识别HTTP SDk实战:基于C# ASP.NET CORE MVC 3.1
预计这是第一篇介绍在ASP.NET CORE 3.1平台下使用百度人脸识别在线sdk的文章,主要介绍人脸1:n检测/活体检验/人脸注册三大关键功能。先看几个效果图吧(1)人脸1:N检测,返回人脸对应用户信息(2)活体检测:识别活体还好图片,防止人脸作弊(3)人脸注册:检测用户是否存在开始在正式开始之前,需要一些准备以及预备知识,这里可以参考https://www.cnblogs.com/xiongze520/p/10387355.html以及https://www.cnb原创 2020-09-02 22:03:36 · 1217 阅读 · 0 评论 -
Dotnet Core异常处理的优雅实践
一、前言异常处理的重要性,老司机都清楚。 这篇文章,我们来理一下Dotnet Core异常处理的几种方式。 Try Catch方式 Exception Filter方式 内建的异常处理中间件 自定义的异常处理中间件 这是目前使用比较多的几种方式。其中,第1、2种其实算是一种,是C#两个语言版本的东西。二、Try Catch方式这是最通常使用的一种方式。看例子:[HttpGet]public IActionResult Get(){转载 2020-08-26 21:56:49 · 358 阅读 · 0 评论 -
[Hei.Captcha] Asp.Net Core 跨平台验证码实现
写在前面说起来比较丢脸。我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是System.Drawing,我把这验证码绘制逻辑复制到.Net Core的新项目引用对比包System.Drawing.Common,windows下面验证码正常,CentOs下面死活不能正常,像这样。(左边为CentOs运行结果,右为Windows) 依赖库检查安装; 字体检查安装; 逻辑检查; 折腾了一天多放弃了..转载 2020-08-23 09:51:10 · 640 阅读 · 0 评论 -
ASP.NET Core中的内存缓存
缓存这块预计整理会出一个系列,主要参考文献是微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/response?view=aspnetcore-3.1。这是这个系列的第一部分--缓存类型。缓存的好处响应缓存可减少客户端或代理对 web 服务器发出的请求数。响应缓存还减少了 web 服务器生成响应所需的工作量。我们可以选择将一些信息通过缓存的方式,存到客户端或者服务端。其中ResponseCacheA..转载 2020-08-14 22:16:05 · 1771 阅读 · 0 评论 -
Entity FrameWork Core使用 Include查询关联数据以及机理。
Entity Framework Core 允许你在模型中使用导航属性来加载相关实体。有三种常见的 O/RM 模式可用于加载关联数据。预先加载表示从数据库中加载关联数据,作为初始查询的一部分。 显式加载表示稍后从数据库中显式加载关联数据。 延迟加载表示在访问导航属性时,从数据库中以透明方式加载关联数据这里仅结束第一种,使用Include的方式。什么是关联的数据?如下图,两个导航属性Assets以及Department,分别对应两个外键AssetsId以及DepartmentId,关联到另.原创 2020-08-11 17:24:22 · 6942 阅读 · 0 评论 -
Entity Framework Core反向工程(DB First)的使用
概述Entity Framework Core 有两种常用的工作机制,一种是基于实体类去生成数据库表( Code First),一种是由数据库表生成实体类(DB First)。可以使用Scaffold-DbContextEF Core 包管理器控制台(PMC)工具的命令或dotnet ef dbcontext scaffold.net 命令行接口(CLI)工具的命令来执行该命令。何时DB First?一般大型的项目,表结构复杂,字段很多时,由数据库设计软件设计好表以后再去反向工程的做法更...原创 2020-08-10 15:58:50 · 2885 阅读 · 0 评论 -
.NET和.NET Core Web APi FormData多文件上传
.NET Web APi FormData文件上传以下是基于webAPI的,通过mvc的方法可以参考:https://blog.csdn.net/weixin_41372626/article/details/107709392我们将参数和文件都通过FormData来上传,给出如下HTML代码<div class="form-horizontal" style="margin-top:80px;"> <div class="form-group"> .转载 2020-08-09 14:32:15 · 3381 阅读 · 1 评论 -
C#微信公众号开发实践--通过控制台程序发布图文消息(2020/8/4实测可用)
前言最近在做融媒体开发的项目时,涉及到了微信公众号图文消息发布等功能,下面是实践。准备有自己的微信公众号,就用自己的,没有的可以到https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login申请一个测试账号进行测试,该测试账号有如下两个坑(1)群发接口不能发布文字消息(2)群发接口发布图文消息返回-1(应该是一个bug...)我用的我们公司的账号进行测试的,开通了以后,会得到一如下两个身份凭证,这个图以测试号为例原创 2020-08-03 15:10:12 · 1058 阅读 · 0 评论 -
C#中HttpWebRequest、WebClient、HttpClient的使用详解
HttpWebRequest:命名空间:System.Net,这是.NET创建者最初开发用于使用HTTP请求的标准类。使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如timeouts, cookies, headers,protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用程序的UI不会停止响应。HttpWebRequest通常和WebResponse一起使用,一个发送请求,一个获取数据。...转载 2020-07-20 10:20:45 · 1800 阅读 · 0 评论 -
C#中你想象的Task,很简单?
【导读】网上关于Task的文章如数家珍,不过有一部分并未谈到一个根本的问题,所创建的Task一定在线程池上运行?如何合理的使用Task?这里并不会去重新讲解每一个APi的使用,没有任何意义,这属于包括我在内的各位童鞋们都必须要了解的基础前提。这里我对其作出基本总结以及使用Task时需要注意的地方。进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。转载 2020-07-13 09:25:14 · 405 阅读 · 0 评论