随笔分类 - C#基础
摘要:异步编程优化:从底层源码看最佳实践 问题背景 在.NET开发中,我们经常会遇到需要封装同步API为异步方法的情况。特别是当底层库没有提供异步版本时,我们不得不使用Task.Run来实现伪异步,这会导致线程池线程的浪费。 本文将从.NET底层源码出发,探讨如何在这种情况下优化异步编程,减少性能开销。
阅读全文
摘要:问题背景 在C#开发中,我们经常使用继承和多态来构建灵活的代码结构。但在构造函数中调用虚方法时,可能会遇到一个隐蔽的陷阱:子类的属性可能还未初始化,导致获取到null值。本文将深入分析这个问题的根本原因,并提供解决方案。 核心问题示例 让我们从一个实际场景开始,假设我们正在构建一个组件系统: cla
阅读全文
摘要:令牌环式同步扩展:从 Ping-Pong 到 ABC 交替执行 在上一篇博客中,我们介绍了六种实现两个线程交替执行的方法。本文将作为扩展,探讨如何将这些实现方式改造为三个线程交替执行 "A"、"B"、"C",形成 "ABCABC..." 的环形序列。 问题描述 实现三个线程交替打印 "A"、"B"、
阅读全文
摘要:在 .NET 开发中,我们经常需要获取程序的各种目录信息,比如应用程序的安装目录、当前工作目录、程序集所在位置等。微软提供了多种方法来获取这些目录信息,虽然它们看起来功能类似,但实际上各有不同的设计意图和使用场景。本文将详细分析这些方法的区别。 一、程序代码示例 首先,让我们看一下测试代码: usi
阅读全文
摘要:在并发编程中,"轮流执行"或"交替执行"是一种常见的同步模式。更正式的说法包括令牌环式同步(Token-Ring Synchronization)或互斥交替(Mutual Exclusion Alternation)。本文将通过乒乓球对练的经典示例,展示六种不同的实现方式,并分析它们的优缺点。 问题
阅读全文
摘要:问题描述 在编写异步代码时,我们经常会遇到这样的情况:使用 for 循环创建多个异步任务,期望每个任务处理循环中的不同值,但最终输出结果却与预期不符。 错误示例 internal class CommonTestCode { public static void Print() { for (int
阅读全文
摘要:在Window系统中,关于权限管理的方案很多,今天我们说下 机器特征识别 + 权限验证 1、我写了一个exe执行文件,使用WPF写的,在我的电脑可以运行,在我的朋友电脑运行要安装其他的dll,后来我知道,我朋友不是专业做开发的,需要下载微软的一些库才行,他跟据电脑提示下载了,然后可以在他的电脑成功运
阅读全文
摘要:1、最近项目中出现了DXF分割的不同引用,一个普通的分割,一个异形分割,但是都是不同版本的dll,却有着同一个命名空间,我在引用时候使用的地址不一样,但是输出地址都是一样的,导致其中一个分割解析出错。 2、解决方案 2-1、使用 <Aliases></Aliases> 为两个dll起个别名,并且重命
阅读全文
摘要:今天打开程序发现不对劲,三个按钮显示一样的Content。 查询代码,发现问题出现在 private void InitMenuData() { HomeMenuItem menuItem = new HomeMenuItem(); var dict = menuItem.ReadUnityConf
阅读全文
摘要:我们只需要知道一点,out经常用在多个参数的输出 ref用在数据的双向传递就好了 public string GetString() { return "Hello,World!"; } var s=GetString(); 这是一个简单输出string的方法,但是只输出了一个参数 我们输出两个参数
阅读全文
摘要:在初学时,我们交换数据一般借助中介者模式 temp int a=10; int b=20; int temp=b; b=a; int a=temp; C#元组,提供了简便的写法 int a = 10; int b = 20; Console.WriteLine($"Before swap: a =
阅读全文
摘要:下面的案例和代码算不上特别基础,关于基础的C#,网上一大堆,我决定重新看一遍C#本质论, 然后记录下,用来完善我的基础,朋友们可以跳着看 1、开始基础 a、解释下string的不可变 string result; result="HelloWorld!"; 在C#中,string 类型是一个引用类型
阅读全文

浙公网安备 33010602011771号