C# 介绍、应用领域、入门、语法、输出和注释详解
什么是 C#? C#(发音为“CSharp”)是一种由 Microsoft 创建的面向对象的编程语言,运行在 . Framewk 上。源于 C 家族,与流行的语言如 C++ 和 Java 相近。首个版本发布于 2002 年,而最新版本,C# 12,于 2023 年 11 月发布 C# 的应用领域 C# 广泛用于:移动应用程序 桌面应用程序 Web 应用程序 Web 服务 网站 游戏 虚拟现实 数据库应用程序 以及更多!为什么使用 C#? C# 之所以受欢迎,原因如下:是世界上最流行的编程语言之一 易学易用
C#串口通讯实战:基础功能及高效数据传输
概述:C#串口通讯示例展示了基本功能,包括打开关闭串口、设置属性、发送和接收数据。通过SerialPt类实现,可根据需求扩展更复杂的串口通讯应用。 最近有项目应用到串口通讯,网上找到一个C#写的调试工具,如下图: 需要的文末可下载。下面我再讲一下串口通讯的基本应用: 在C#中进行串口通讯通常涉及到一些基本的功能,如打开串口、发送数据、接收数据等。以下是一个简单的例子,演示了C#中串口通讯的基本功能。 常用功能:打开和关闭串口: 使用SerialPt类的Open()和Close()方法。 设置串口属性: 包
.net core ECDsa
ECDsa(Elliptic Curve Digital Signature Algithm)是一种基于椭圆曲线密码学的数字签名算法。在. Ce中,System.Security.Cryptography.ECDsa 类提供了对ECDsa算法的支持。 ECDsa 算法用于生成和验证数字签名,其主要用途包括: 数字签名: 使用私钥对数据进行签名,生成数字签名。这个数字签名可以验证数据的完整性和身份。签名的生成和验证过程使用椭圆曲线上的相关数学运算,保证了安全性。 using System using Sys
SqlSugar入门
SqlSugar入门 创建对象 你可以使用 SqlSugarClient (new模式)或者 SqlSugarScope (单例) 对数据库进行增、删、查、改等功能 注意:除了名字和使用模式不同,功能和API都一模一样SqlSugarClient(new模式)优点:性能比SqlSugarScope有5%左右提升 缺点: db不能跨上下文使用,需要new出一个新对象(EF和Dapper一样), 偶发错误难排查适合有经验用户 模式:不能单例因为他不是线程安全对象SqlSugarScope (单例模式) 5.
正确理解c# default关键字
背景 最近QA测试一个我开发的一个Web API时,我意识到之前对C#的default的理解一直是想当然的。具体情况是这样,这个API在某些条件下要返回模型的默认值,写法类似于下面这样 [HttpGet(Name = "GetWeatherFecast")] public WeatherFecast Get() {return default }实际上,这个API会返回204 No Content,而不是想象中的一个空的WeatherFecast。API返回204,说明default得到值是null,为什
C#中var关键字详解:强类型、匿名类型和LINQ查询的妙用!
在C#中,var关键字是强类型的,因为它在编译时会根据变量的初始化表达式推断出变量的实际类型,并且一旦确定了类型,就不能再更改。这种类型推断是在编译时进行的,因此代码中的变量在运行时是具有明确定义类型的。 下面是一个简单的示例,说明var的强类型特性以及使用时的一些注意事项: using Systemclass Program {static void Main(){ 示例1: var的强类型var name = "John" 编译器会推断name的类型为string name = 123 编译错
记一次 .NET某MES自动化桌面程序 卡死分析
一:背景 1. 讲故事 前些天有位朋友在微信上找到我,说他们的客户端程序卡死了,让我帮忙看下是什么原因导致的?dump也拿到了手,既然有了dump就开始正式分析吧。 二:WinDbg 分析 1. 什么导致的卡死 客户端的程序卡死比较好找原因,入手点就是主线程,看下它此时正在做什么,可以用 k 命令。0:000 k# ChildEBP RetAddr 00 003cdf7c 74c115ce ntdll!NtWaitFSingleObject+0x15 01 003cdf7c 756e1
为什么C#要采用顶级语句?
前言 有群友问:为什么C#要采用顶级语句? .6发布后,C#10莫名引入了顶级语句,这是一种简化代码结构的语言特性。在此之前,C#程序必须包含一个入口点,通常是Main方法,然后在该方法中编写主要的程序逻辑。而使用顶级语句后,可以直接在文件的顶部编写执行代码,而无需显式地定义一个Main方法。为啥要用顶级语句呢?先来看官方的总结:“使用顶级语句,可以更轻松地创建简单的程序来探索新的算法。可以尝试使用不同的代码片段来试验算法。了解了哪些可用后,可以重构代码,使其更易于维护。接下来本文将介绍为什么引入了顶级语
聊一聊为什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core
前言 如果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle、AspectCe和DaInterception 我将从我当时研究的经历,以及我遇到的场景,为大家展示下 聊一聊我为什么要费时费力的整合Microsoft.Extensions.DependencyInjection和Castle.Ce 当时遇到的场景 直接上源码public interface IEventHler{Taskbool HleAsync(IEvent @event)bool CanHle(IEvent @
C# WPF 开发一个 Windows 动态屏保软件
写在前面 两年前我做了第一个开源软件 DreamScene2 动态桌面,如今受到了很多人的喜欢,这增加了我继续做好开源软件的信心。之前的这个软件一直有人希望我加入一个设置屏保壁纸的功能,因为 DreamScene2 就是一个单纯的动态桌面的软件,所以一直没有加入这个功能。今天我带来一个新的开源软件,软件依然是小而强大,简洁并且快速。 欢迎 Star 和 Fk: https:github.comhe55SonomaWallpaper 介绍 Sonoma Wallpaper 是首款将 macOS Sonoma
XAML中DataTemplate变量隐藏的解决方法
前言 微软的许多XAML框架,如WPF、UWP、WinUI3等,在DataTemplate下都会遇到变量隐藏(Variable shadowing)的问题。为了访问外部实例成员,经常需要写很多曲折的代码,但也没有办法。本文也无法解决这个问题,但记录了我知道的方法,以便在各种情况使用,争取将可读性的影响降到最低。 问题再现 按照需求创建了一个Page: public sealed partial class SamplePage : Page {public string OuterMember { get
源生成器:根据需要自动生成机械重复代码
前言 本文概述了利用. Compiler Platfm(“Roslyn”)SDK 附带的源生成器(Source Generat)自动生成机械重复的代码。关于这部分的基础入门知识可以在MSDN[1]学到。 本文默认已经有一个解决方案,包含两个项目。一个是普通C#项目,依赖于另一个源生成器项目。 创建及使用Attribute 此处以DependencyPropertyAttribute为例,可以为拥有本Attribute的类,自动获取所有定义过的属性,并将它们在一个构造函数里初始化。 本DependencyP
分析器:常见问题
前言 源生成器(增量生成器)由于它特殊的定位,关于它的调试十分困难。在这里分享一些调试它的经验。 另外经常有写类库,然后提供可以生成代码的Attribute给用户的需求,此时需要用到传递引用的知识点。 调试源生成器 源生成器执行时间 源生成器项目和普通的项目不同。 普通的会在你按下运行或调试后才会运行;而源生成器会在两种情况下运行: 重新生成解决方案或该项目时候运行,运行后会生成dll文件。在下一次启动VS的时候,会连着dll一起读取,所以可能会有VS找不到生成的文件导致报错,但可以正常运行的问题,重启V
Avalonia报错:no executable found
创建了一个Avalonia控件库,添加了一个UserControl进行编辑时,出现了一个奇怪的问题:无法预览,没有智能提示,编译报错No executable found。设计器显示:reference the library from an executable wait f the solution to finish loading。 搜索报错信息:reference the library from an executable wait f the solution to finish l
C#与C++代码的互操作方式
大致介绍 在写C#程序时经常有与本地代码(CC++)代码交互的需求。微软提供了许多种方式供我们选择, 最常用的有以下三种(AB指A可以引用B): flowt LRAPInvokeBAC++ InteropCACOM InteropDDCBsubgraph 托管环境A[.应用程序]endsubgraph 非托管环境B[C 库函数]C[C++ 类库]D[COM组件]endPInvoke (Platfm Invoke):平台调用,是一种用于和非托管函数进行交互的技术, 在调用Windows API的时候有大量的
.NET中轻松应用SQLite:零配置数据库引擎的完美指南
SQLite 是一种轻量级的嵌入式数据库引擎,它在 . 中被广泛使用。SQLite 是一个零配置的数据库引擎,不需要服务器,可以直接在应用程序中使用。下面是一个简单的示例,演示如何在 . 中使用 SQLite,并提供了常见的查询、增加、修改和删除功能。 首先,你需要在项目中安装 System.Data.SQLite 包。你可以使用 NuGet 包管理器或通过 Package Manager Console 执行以下命令: InstallPackage System.Data.SQLite 接下来,创建一个
解决WPF界面卡死等待问题:三种高效处理耗时操作的方法!
概述:克服WPF界面操作中的卡顿问题,本文介绍了三种实用方法:异步操作、后台线程、以及BackgroundWker,助您提升应用响应性,确保用户体验流畅。选择适合项目的方案,轻松解决耗时操作导致的界面卡死等待情况! 当WPF界面操作中存在耗时的后台处理时,为了避免界面卡死等待问题,可以采用以下解决方法: 方法一:使用异步操作 优点:提高应用的响应性 不会阻塞UI线程步骤:将耗时操作封装在Task.Run中。 使用asyncawait确保异步执行。private async void Button_Clic
Json Schema介绍 和 .net 下的实践
本系列旨在介绍Json Schema的常见用法,以及.实现库Lateapexearlyspeed.Json.Schema的使用这篇文章将介绍Json Schema中的type关键字,和string类型的常见验证功能。用例基于.的LateApexEarlySpeed.Json.Schema nuget package。这是新创建的一个 Json Schema在.下的高性能实现库。最简单的Json Schema 就像其他各种Schema一样,Json Schema的一个基本且核心的目的是对Json数据进行描述
博客后台接口分页优化-访问记录篇
博客后台接口优化访问记录📜 前言 博客地址:ZY知识库 · ZY Home Page (pljzy.top) www.pljzy.top 一直没有更新文章了,曾梦想着每周更新一篇文章。直到上班之后才知道,根本不想写。我现在的状态就是下班回家吃完晚饭刷会视频看会剧,洗个澡儿,睡觉。下班之后根本不想写代码😮💨。 如果是双休的话我可能会一周一更,但是单休的程序员,我真的一点动力都没有,已经被资本家压榨得干干净净了。 回到正题,虽然文章没有更新,但是博客还是有收到各大搜索引擎的爬虫(除开百度,因为博
Avalonia PathIcon使用
PathIcon是一个Avalonia内置的控件,可以根据Geometry绘制一个图标。 源码 PathIcon间接继承TemplatedControl,只有一个Geometry类型的依赖属性Data: public class PathIcon : IconElement {static PathIcon(){AffectsRenderPathIcon(DataProperty)}public static readonly StyledPropertyGeometry DataProperty =Av
C#基于ScottPlot进行可视化
C#基于ScottPlot进行可视化 前言 上一篇文章跟大家分享了用NumSharp实现简单的线性回归,但是没有进行可视化,可能对拟合的过程没有直观的感受,因此今天跟大家介绍一下使用C#基于Scottplot进行可视化,当然Python的代码,我也会同步进行可视化。 Python代码进行可视化 Python代码用matplotlib做了可视化,我就不具体介绍了。 修改之后的python代码如下: #The optimal values of m b can be actually calculated
聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完结篇)
前言 书接上回,上回我们了解了 castle 代理的一些缺点,本文将开始操作整合 Microsoft.Extension.Dependency和Castle以让默认的容器可以支持拦截器 我们将以进阶的形式逐步完善我们的封装,以实现一个更方便易用、普适、高性能的基础设施库。基础版 还是先上代码, 这是基础版本我们要达成的目标,仅需定义一个特性即可完成拦截的目标 summary summary public abstract class InterceptBaseAttribute : Attribu
WPF 医院叫号系统
C# . 4.8 WPF 桌面版医院叫号系统 数据库 SQLServer 2012 数据队列 Redis 日志 log4 医生客户端登陆 科室设置,医生职称设置,医生科室和房间设置,就诊设置,用户设置,用户就诊记录,医生看诊记录,用户预约记录,用户叫号记录,分配记录,用户扫码机自助扫描签到等。 设置,叫号,排号,大厅大屏显示当前排号,号码滚屏 叫号,医生门口led显示屏当前医生状态显示及号码排号显示。 redis数据缓存,redis消息队列,医生和号码随机分配及自主分配。 C# . 4.8 wpf
加速下载体验:C#多线程分块下载文件与实时进度展示
概述:该C#示例演示了如何使用多线程分块下载文件并显示下载进度。程序通过确定文件大小,创建多个线程,分配下载范围,同时下载文件块,最后合并文件。通过简单的控制台应用,用户可以清晰地看到下载进度。此方法提高了下载效率,更好地利用了网络带宽。 多线程分块下载文件的原理是将文件分成多个块,每个线程负责下载一个块的数据,最后将所有块合并成完整的文件。这样可以提高下载速度,并充分利用网络带宽。 方法与步骤确定下载文件的大小: 在下载之前,需要获取要下载文件的大小,以便将其分成适当的块。 创建多个线程: 创建多个线程
使用WPF开发自定义用户控件,以及实现相关自定义事件的处理
在前面随笔《使用Winfm开发自定义用户控件,以及实现相关自定义事件的处理》中介绍了Winfm用户自定义控件的处理,对于Winfm自定义的用户控件来说,它的呈现方式主要就是基于GDI+进行渲染的,对于数量不多的控件呈现,一般不会觉察性能有太多的问题,随着控件的数量大量的增加,就会产生性能问题,比较缓慢,或者句柄创建异常等问题。本篇随笔介绍WPF技术处理的自定义用户控件,引入虚拟化技术的处理,较好的解决这些问题。 前面例子我测试一次性在界面呈现的控件总数接近2k左右的时候,句柄就会创建异常。由于Winfm控
开源:Taurus.DTC 微服务分布式事务框架,支持 .Net 和 .Net Core 双系列版本
前言: 在经过1年多的深思,十几年的框架编写技术沉淀下,花了近一个月的时间,终于又为 . 及 . Ce 的微服务系列框架贡献当中的一个重要组件。 1、开源地址: https:github.comcyq1162Taurus.DTC 2、Nuget 包引用ID: 由于 CYQ.Data m 组件本身支持10多种数据库,因此提供的包,只根据消息队列的需要分拆提供。 默认Taurus.DTC 支持同时使用 RabbitMQ 和 Kafka 两种消息队列。 如果一个项目中只用RabbitMQ,则引入 Taruru
【独立闯天下】Prime新传奇!💥原团队的Blazor版本迟迟无音,合并请求石沉大海。于是,我们决定单干!加入Prime Blazor版项目,一起开创崭新的旅程吧!🌟📚
共建Prime的Blaz版:为开源社区注入新活力 Prime组件库作为一款广受欢迎的开源组件库,一直以来都备受开发者们的青睐。然而,随着技术的不断发展和更新,原团队的Blaz版本似乎已经逐渐失去了活力,长时间没有得到更新和维护。在这样的背景下,一群热爱开源、热衷于Blaz技术的开发者们决定挺身而出,重新打造一个全新的Prime的Blaz版。 这个新的Blaz版本已经完成了从0到1的过程,虽然还存在一些BUG,但已经具备了初步的功能和可用性。这离不开每一位参与者的辛勤付出和贡献。为了更好地完善这个项目,我们
C# 完美实现物联网 MQTT 数据通信
前言 MQTT 协议由于其用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务,具有开销低、占用带宽低、即时通讯等优点,使其在物联网、小型设备、移动应用等方面有较广泛的应用,在工业物联网中,MQTT也有广泛的应用。 Step By Step 步骤搭建一个 MQTT 服务器见本人其它文章《手把手教你在 Windows 环境中搭建 MQTT 服务器》创建一个 . Framewk Console 项目,命名为 MQTTSample添加 NuGet 包 package id="MQTT" version
Avalonia创建自定义控件
Avalonia中有三个主要的控件类型:用户控件(User Control)、模板化控件(Templated Control)、基本控件(Basic Control)。创建自定义控件时选择适合的控件类型进行创建,三种控件类型适用场景如下(参考文档):UserControl:适合创建Views或Pages,和创建Window一样,创建一个新的UserControl,然后添加控件即可; TemplatedControl:最常用,能在多个程序之间共享的通用控件。Avalonia定义的大多数标准控件都属于这一类;
浅谈WPF之Popup弹出层
在日常开发中,当点击某控件时,经常看到一些弹出框,停靠在某些页面元素的附近,但这些又不是真正的窗口,而是页面的一部分,那这种功能是如何实现的呢?今天就以一个简单的小例子,简述如何在WPF开发中,通过Popup实现鼠标点击弹出浮动停靠窗口,仅供学习分享使用,如有不足之处,还请指正。 什么是Popup Popup(弹出层),Popup 控件提供一种在单独窗口中显示内容的方法,该窗口相对于指定元素或屏幕坐标在当前应用程序窗口上浮动。 Popup控件通过IsOpen属性控制是否可见。 当可见时,IsOpe