C#
文章平均质量分 95
包含C#基础及进阶知识
冰茶_
专注于C#技术领域的软件工程师,同时也在探索AI编码方面
博客中的所有相关资源如果无法下载都可以私信博主免费下载
愿未来如晨曦般灿烂,人生如繁星般璀璨
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
两分钟让你打包一个.net Core程序-全面的.NET应用程序自动化打包解决方案
本文介绍了一个通用的.NET应用程序自动化打包工具,主要特点包括: 支持多种.NET项目类型(WPF/WinForms/Console) 智能版本管理,自动提取项目文件中的版本信息 兼容所有Inno Setup版本,支持自包含部署 详细的工作流程图示和项目配置说明 遵循语义化版本控制规范 工具通过批处理文件实现一键打包,输出包含安装程序和发布文件的完整打包结构,适用于从.NET Framework 4.5.2到.NET 9.0的多版本支持环境。原创 2025-06-17 07:00:00 · 2502 阅读 · 0 评论 -
TCP/IP和UDP协议的发展历程
年份事件重要性1969ARPANET建立第一个分组交换网络,互联网的前身1974TCP/IP概念提出奠定了互联网的基础架构1978TCP和IP分离确立了分层网络架构的理念1981IPv4标准化定义了互联网主要使用的IP版本1982TCP和UDP标准化确立了两个主要传输协议1983ARPANET转向TCP/IPTCP/IP成为互联网的核心协议1989WWW概念提出Web应用成为TCP/IP最成功的应用1998IPv6标准化解决IP地址短缺问题2012。原创 2025-04-18 22:34:19 · 1588 阅读 · 0 评论 -
Silverlight发展历程(微软2021年已经停止支持Silverlight 5)
2011 年 12 月,微软发布了 Silverlight 5.0,这是 Silverlight 的最后一个主要版本。改进的媒体播放能力,包括硬件解码和 GPU 加速低延迟实时音频流支持3D 图形支持,基于 XNA 框架增强的文本渲染,支持 OpenType 字体改进的数据绑定调试远程控制支持P/Invoke 支持,允许调用本地 C/C++ 代码改进的打印支持Silverlight 5.0 是一个功能强大的版本,特别是在企业应用和媒体应用领域提供了丰富的能力。原创 2025-04-18 15:17:16 · 2337 阅读 · 0 评论 -
C# yield关键字的工作原理及最佳实践
C#中的yield关键字提供了一种高效的迭代器实现方式,支持延迟执行和按需生成数据。它通过编译器生成的状态机实现迭代逻辑,无需提前加载所有数据到内存。yield return返回序列中的元素,yield break提前终止迭代。典型应用场景包括处理大型文件、生成无限序列、自定义集合遍历以及数据过滤转换等。相比传统方法,yield显著提升内存效率,特别适合处理大数据集,每次迭代只生成当前所需元素而非整个集合。原创 2025-05-30 08:00:00 · 7706 阅读 · 0 评论 -
C#中的BeginInvoke和EndInvoke:异步编程的双剑客
C# BeginInvoke和EndInvoke方法解析 本文深入探讨了C#中的异步编程模型(APM)核心方法BeginInvoke和EndInvoke。主要内容包括: 基本概念:BeginInvoke启动异步操作并立即返回,EndInvoke获取操作结果并释放资源,两者通过IAsyncResult关联 四种使用模式: 等待模式:先执行其他操作,需要结果时调用EndInvoke 轮询模式:定期检查IsCompleted状态 等待句柄模式:使用AsyncWaitHandle等待操作完成 回调模式:异步完成后自原创 2025-05-29 11:42:52 · 1482 阅读 · 0 评论 -
C#回调函数深度解析
本文深入探讨了C#中回调函数的实现与应用。回调函数是一种通过将函数作为参数传递实现灵活编程的技术,主要包括以下几种实现方式: 委托(Delegate) - 类型安全的函数指针,支持多播和封装 事件(Event) - 基于委托的发布-订阅模型,提供更强的封装性 Action/Func - 预定义的泛型委托类型,简化代码编写 Predicate - 专用于条件判断的特殊委托 AsyncCallback - 传统异步编程模型中的回调机制 文章通过代码示例详细展示了每种实现方式的具体应用场景和使用方法,帮助开发者理原创 2025-05-29 11:22:01 · 2097 阅读 · 0 评论 -
C#委托详解:区别与实战应用
C#中的委托是类型安全的函数指针,用于将方法作为参数传递。主要有四种类型:普通委托(自定义签名)、Action(无返回值)、Func(有返回值)和Predicate(返回bool的单参数方法)。Action和Func是.NET框架预定义的泛型委托,支持0-16个参数。委托使用分三步:声明类型、创建实例(绑定方法)和调用。它们广泛应用于回调、事件处理和LINQ等场景,提供灵活的方法封装与调用机制。原创 2025-05-26 08:00:00 · 2086 阅读 · 0 评论 -
IEnumerable与IQueryable核心区别解析
本文对比了.NET中IEnumerable<T>和IQueryable<T>接口的核心区别。IEnumerable<T>在内存中执行查询操作,适合处理小型数据集;而IQueryable<T>通过表达式树将查询转换为SQL在数据源端执行,更适合处理大型数据库查询。关键差异包括查询执行位置、延迟执行方式(委托vs表达式树)和性能特点。文章通过性能测试案例展示了IQueryable在处理百万级数据时的显著优势(快10倍以上),并提供了最佳实践建议:IQueryabl原创 2025-05-25 08:00:00 · 877 阅读 · 0 评论 -
C#8.0本质论:C#开发者必备的权威指南
《C#8.0本质论》由C#专家Mark Michaelis撰写,是一本全面深入的C#技术书籍,适合从初学者到高级开发者的多层次读者。书中详细解析了C# 8.0的新特性,如可空引用类型、异步流等,并提供了丰富的示例代码和最佳实践。全书结构清晰,从基础知识到高级编程,涵盖了面向对象构造、集合与LINQ、多线程处理等内容。作者通过系统性讲解和实用建议,帮助读者编写高质量、高效的C#代码。这本书不仅是一本教程,更是C#开发者的参考指南,适合希望在快速发展的编程世界中保持技术更新的开发者。原创 2025-05-19 08:00:00 · 7829 阅读 · 0 评论 -
【C#】C#中常见的锁以及用法
C# Lock(锁),Monitor(监视器锁),Mutex(互斥量),SemaphoreSlim(信号量),ReadWriterLockSlim(读写锁),SpinLock(自旋锁),InterLocked,任务并行库(TPL)锁确保在同一时间,只有一个线程可以访问某一资源或者执行某段代码,锁可以防止多个线程共同修改共享数据,导致数据不一致.指在多线程环境中,确保只有一个线程能够访问共享资源的特性.程序中访问共享资源的代码块,需要被保护以防止并发访问.原创 2025-01-17 15:26:30 · 2947 阅读 · 0 评论 -
【C#】C#中进程和线程的区别
进程是操作系统分配资源的基本单位,适用于需要隔离的应用程序线程是程序执行的基本单位,适用于需要高效利用CPU,执行并发任务的程序线程池:通过重用现有线程来优化线程的创建和销毁功能,从而提高应用程序的性能和资源利用率原创 2025-01-17 10:01:55 · 1078 阅读 · 0 评论 -
【C#】C#范围表达式,模式匹配,逆变和协变
范围表达式是C# 8.0引入的新特性,它提供了一种简洁的语法来表示数组,字符串或任何实现了索引器的集合类型的子范围(slice).通过范围表达式,可以更方便地从集合中提取出特定范围的元素模式匹配是C#从7.0版本开始引入的特性,用于更简洁地表达类型检查,解构和条件判断.在C# 8.0及后续版本中,模式匹配得到了进一步增强,使代码更加清晰和易读协变适用于从派生类型转换为基类型(类型参数用于输出)逆变适用于从基类型转换为派生类型(类型参数用于输入)原创 2025-01-12 19:03:21 · 1487 阅读 · 0 评论 -
【C#】C#结构体,枚举,泛型,事件,委托
一.结构体二.特殊的结构体(ref struct):三.枚举四.泛型泛型的使用:1.泛型类:定义一个泛型类,使用类型参数T2.泛型方法:在方法定义中使用类型参数3.泛型接口五.委托及泛型委托委托泛型委托六.事件事件:泛型事件:使用泛型委托(如EventHandler)来声明事件,可以传递更具体的事件数据。七.事件,委托,泛型结合使用原创 2025-01-11 22:40:59 · 1340 阅读 · 0 评论 -
【C#】C# 并发和并行的区别
并行和并发都涉及到同时处理多个任务,但在执行方式,目的和实现上存在差异。是两个密切相关但是又有区别的概念。原创 2025-01-16 20:32:03 · 2509 阅读 · 0 评论 -
【C#】C#在多线程中使用任务并行库(TPL)
任务并行库(TPL)提供了丰富的方法来简化多线程和异步编程: Parallel.For和Parallel.ForEach:用于并行执行循环或遍历集合 ParallelOptions:允许配置并行操作的行为,例如最大并行度和取消操作支持 本地变量:在并行操作中使用本地变量,可以避免线程间的数据竞争,提高性能和安全性 结合Task:通过并行操作嵌套在任务中,可以创建复杂的并行和异步流程在使用TPL中,需要注意以下几点: 线程安全:在并行操作中访问共享资源时,需确保原创 2025-01-16 15:37:36 · 2307 阅读 · 0 评论 -
【C#】(图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查
在C#的编译工具Visual Studio中使用SQLServer在VS中对SQLServer中的Students表进行简单的增删改查原创 2025-01-15 16:16:12 · 2441 阅读 · 0 评论 -
【C#】C# 迭代,递归,回调
三种模式的特点对比:迭代: 特点: 逐个处理元素 内存效率高 代码直观 适用场景: 集合遍历 简单重复操作 需要延迟计算递归: 特点: 自调用 代码简洁 需要注意栈溢出 适用场景: 树形结构处理 分治算法 自然递归问题回调: 特点: 灵活可配置 解耦操作 支持原创 2025-01-13 15:30:09 · 1041 阅读 · 0 评论 -
【C#】C#异步和多线程,Thread,Task和async/await关键字
目的不同:多线程主要用于并行执行 CPU 密集型任务,异步编程主要用于非阻塞地执行 I/O 密集型任务实现方式:多线程通过创建和管理线程实现并行,异步编程通过非阻塞的操作和回调机制实现,不一定需要多线程资源利用:多线程可能会创建大量线程,占用系统资源;异步编程通常使用回调或任务,不需要额外的线程在实际的开发中优先使用 async/await 处理异步操作,需要并行计算时使用 Task,只在特殊情况下使用 Thread原创 2025-01-13 14:19:35 · 3143 阅读 · 0 评论 -
【C#】C# 虚方法和抽象方法的区别,重写和重载的区别,参数修饰符(ref、out、in、params)
在继承抽象类时,如果抽象类中含有(一个或一个以上的)抽象方法,由于抽象方法在基类中只有方法并没有方法体,可以理解为当派生类继承基类中的抽象方法时,必须去补充基类中抽象方法缺乏的方法体(即重写抽象方法)速记:因为在继承含有虚方法的类时,虚方法已经在基类中写过方法体,可以理解为基类中已经写过一次的方法在派生类中可以但是没有必要去重写虚方法(仅有需要的情况下再去重写)方法内部是只读的(即在方法内部是不能够对其进行修改的)必须在方法内部进行修改并且会影响到原数值。基类中已定义的虚方法或抽象方法的新实现。原创 2025-01-11 20:24:25 · 1784 阅读 · 0 评论 -
【C#】C#面向对象(封装,继承,多态,抽象)
多态是指同一操作在不同对象上具有不同的表现形式.通过多态,可以使用统一的接口来调用不同对象的特定实现抽象是对现实世界复杂对象的建模,提取出关键特性,忽略不必要的细节.抽象可以通过抽象类和接口来实现,提供一个模板,让子类实现特定的功能封装:通过访问修饰符和属性,保护对象的内部状态,提供受控的访问接口继承;子类继承父类的属性和方法,实现代码重用和逻辑扩展多态:通过方法重写和接口实现,实现相同接口的不同表现形式,增强代码的灵活性和可扩展性抽象:通过抽象类和接口,定义对象的抽象模型,强制子类实现特定的行为。原创 2025-01-10 15:35:31 · 1423 阅读 · 0 评论 -
【C#】C#中的Array数组,List集合和ArrayList集合
类型安全性:Array和List提供类型安全,而ArrayList不提供。大小调整:Array大小固定,List和 ArrayList大小可动态调整。性能:Array通常性能最好,List次之,ArrayList由于装箱和拆箱可能性能最差。使用场景:Array适合固定大小的集合,List适合动态大小且类型一致的集合,ArrayList适合需要存储不同类型对象的旧代码。原创 2025-01-10 12:07:40 · 2026 阅读 · 0 评论 -
【C#】C#中的运算符和类
一.运算符1.赋值运算符2.算数运算符3.关系运算符4.逻辑运算符5.位运算符6.三元运算符7.空合并运算符8.其他运算符二.类1.普通类2.静态类3.抽象类4.密封类5.部分类6.泛型类7.嵌套类8.记录类9.接口原创 2025-01-09 14:44:53 · 1152 阅读 · 0 评论 -
【C#】C#中的类型转换以及异常处理
常见的隐式转换规则:1)从sbyte,byte,short,ushort,int到long,float,double或decimal2)从char到ushort,int,long,float,double或decimal显式转换需要使用强制转换操作符(即类型名),因为这种转换可能会丢失数据或者导致运行时异常。显式转换通常用于不兼容类型之间的转换,或者从较大范围的类型转换为较小范围的类型。异常处理,异常过滤器在C#中,我们常使用try,catch,finally和throw关键字来实现异常的处理原创 2025-01-09 09:58:15 · 1680 阅读 · 0 评论 -
【C#】C#转义符,字符串拼接,值类型,引用类型
在C#中,字符转义序列(也称为转义符)是用来表示特殊字符的一种方式.当你需要在字符串中插入特殊字符,如换行符、制表符或引号时,就需要使用转义序列字符串拼接的概念:字符串拼接是将两个或者多个字符拼接起来形成一个新的字符串的过程.,引用类型与值类型有何不同?值类型变量将其值直接存储在名为堆栈的存储区域中。引用类型变量将其值存储在名为堆的单独内存区域中。原创 2024-08-03 17:37:46 · 2017 阅读 · 0 评论 -
【C#】C#选择语句和循环语句
一. if-else选择语句1. if-else可以进行逐个选择2. if-else也可以进行区间选择3.if-else可以同时对多个变量进行选择二.Switch-case选择语句1. switch-case可以进行逐个选择2.1 switch-case可以通过case穿透进行区间选择2.2 switch-case也可以通过模式匹配进行选择3.switch-case可以同时对多个变量进行选择三.if-else和switch-case的区别四. 循环控制原创 2024-07-30 22:26:24 · 1411 阅读 · 0 评论 -
【C#】C#中的字面量和运算符
C#中的字面量和简单的运算符原创 2024-07-30 16:32:15 · 630 阅读 · 0 评论 -
【C#】了解C#
一.熟悉Visual Studio 创建项目流程二.在项目中如何新建项目三.控制台打印Hello World!四.了解注释1.单行注释2.多行注释(块注释)3.XML注释4.region注释方式五.变量1.什么是变量2.声明变量命名规则:命名约定:3.声明隐式类型本地变量1.什么是隐式类型本地变量使用var关键字的变量必须初始化4.使用var关键字的好处1.代码的简洁性2.提高可读性3.易于重构4.强类型保证原创 2024-07-30 15:07:47 · 699 阅读 · 1 评论
分享