- 博客(17)
- 收藏
- 关注
原创 .NET 进阶 —— 深入理解线程(3)ThreadPool 与 Task 入门:从手动线程到池化任务的升级
ThreadPool线程池是.NET中管理线程的重要机制,它通过复用线程避免频繁创建销毁线程的开销。相比手动创建Thread,线程池预先创建少量线程并重复使用,显著提高性能。核心方法是ThreadPool.QueueUserWorkItem(),接收符合WaitCallback委托格式的任务(无返回值,可带object参数)。使用时需注意线程池线程默认是后台线程,主线程结束会终止进程导致未完成任务丢失。线程池自动处理线程生命周期,适合高并发场景,能有效控制资源消耗。
2025-12-23 13:25:51
820
原创 .NET进阶——深入理解线程(2)Thread入门到精通
本文介绍了在.NET中使用Thread类创建线程的两种方式:无参数线程(ThreadStart委托)和有参数线程(ParameterizedThreadStart委托)。通过示例代码展示了如何显式声明委托和简化写法(包括Lambda表达式),并解释了底层原理。文章还说明了为什么可以直接使用Lambda表达式创建线程,以及编译器自动转换的机制。最后通过一个包含自定义类的完整示例,演示了实际开发中的线程创建和使用场景。
2025-12-17 23:57:45
951
2
原创 .NET进阶——深入理解线程(1)同步异步与单线程多线程的区分
本文介绍了多线程编程中的核心概念,重点区分了同步/异步与单线程/多线程的区别。同步指当前线程必须等待任务完成(如点外卖时一直等待),而异步允许线程在任务执行期间处理其他事务(如点完外卖去洗碗)。单线程指所有代码在单一线程执行,多线程则涉及创建新线程并行工作。通过外卖点餐的生动比喻和代码示例,文章直观展示了Thread.Sleep()和Thread.Join()的差异,以及如何通过线程ID判断代码执行在单线程还是多线程环境。理解这些概念对掌握.NET多线程编程至关重要。
2025-12-16 22:14:55
817
原创 .NET进阶——深入理解Lambda表达式(2)手搓LINQ语句
LINQ是C#内置的统一查询框架,通过扩展方法+Lambda表达式实现数据操作。它提供两种语法:SQL风格的查询语法和底层方法语法。本文通过订单筛选示例,演示了LINQ的核心功能:1)统一操作不同数据源;2)编译时类型检查;3)简化代码逻辑。特别展示了如何手动实现Where、Select等核心方法,揭示LINQ底层原理。建议新手优先掌握方法语法,因其更贴近LINQ的实际实现方式。
2025-12-14 16:35:47
885
原创 .NET进阶——深入理解Lambda表达式(1)Lambda入门
本文通过订单筛选案例,详细展示了C#中Lambda表达式的语法演变过程:从.NET 1.0的原始委托(需定义命名方法),到.NET 2.0的匿名方法(省去方法名),最终发展为.NET 3.5+的Lambda表达式(极简语法)。重点解析了Lambda的底层本质仍是委托,并提供了不同场景下的语法规则说明。文章采用"业务场景→代码示例→核心解析"的教学结构,帮助新手理解语法简化的必要性及其实现原理。
2025-12-14 14:09:53
754
原创 .NET进阶——深入理解委托(4)事件实战
本文通过"幸福小区停水通知"的案例,演示了C#事件机制的实战应用。首先介绍了系统自带的EventHandler委托,它需要传递发送者(sender)和事件参数(e)两个参数。然后构建了三个关键类:WaterStopNotice(继承EventArgs的停水信息类)、CommunityProperty(物业发布者类)和HouseOwner(业主订阅者类)。物业通过SendWaterStopNotice方法触发事件,将自身实例和停水详情传递给已订阅的业主;业主通过ReceiveNotice方
2025-12-12 21:28:28
1204
原创 .NET进阶——深入理解委托(3)事件入门
本文通过"小猫叫"案例演示了C#中委托与事件的关系。首先展示了使用公共委托字段的问题:外部可直接修改、调用或清空委托,破坏了"只有小猫叫才触发动作"的逻辑。然后引入事件作为解决方案,将公共委托字段改为事件后,只开放订阅(+=)和取消订阅(-=)操作,禁止外部直接赋值或调用。完整代码实现了观察者模式,包含发布者(Cat类)、订阅者(Child等类)及事件订阅流程,最终通过事件封装保证了程序的逻辑完整性。
2025-12-12 21:25:55
1033
原创 .NET进阶——深入理解委托(2)嵌套委托:手写中间件框架
本文介绍了如何利用委托实现中间件框架,通过自定义上下文对象CustomContext贯穿请求/响应链条。核心思路是将核心方法包裹在前后处理逻辑中,利用高级委托(委托的委托)实现中间件的顺序执行。文章演示了如何在不修改核心代码的情况下,通过委托组合实现请求阶段的顺序执行和响应阶段的逆序执行,从而模拟ASP.NET Core中间件的处理流程。
2025-12-11 22:18:18
714
原创 .NET进阶——深入理解委托(1)委托入门
本文介绍了C#中委托的概念和使用方式。委托相当于一个"方法容器",可以将方法存储其中并通过委托调用。文章首先展示了委托的基本用法,包括定义委托类型、绑定方法和调用委托。随后详细讲解了四种创建委托的方式:显式创建、方法组转换、匿名方法和Lambda表达式。在调用方面,介绍了Invoke()方法和直接调用两种语法。最后通过"租房中介"的比喻,形象解释了委托的本质是将方法变成可传递、存储和调用的对象,并演示了委托的多播功能。委托的核心作用是解耦调用方和方法实现,增强代码灵活
2025-12-11 22:14:43
980
原创 .NET进阶——深入理解反射(4)利用反射获取信息(方法、特性)
摘要:通过反射获取方法信息与特性信息 本文重点介绍如何利用.NET反射机制获取类型的方法信息和特性信息。在方法信息方面,详细解析了MethodInfo类的核心属性和方法,包括获取方法名称、返回值类型、参数列表以及动态调用方法等操作。通过示例代码演示了如何获取并调用公共/私有方法、带参数方法以及泛型方法。在特性信息方面,讲解了如何通过反射检测和获取方法上应用的自定义特性。文章为开发者提供了利用反射动态操作方法的技术指南,适用于需要运行时类型检查和方法调用的高级开发场景。
2025-12-10 19:23:59
783
原创 .NET进阶——深入理解反射(3)利用反射获取信息(对象、属性、字段)
本文详细介绍了.NET反射中的核心类及其用法,包括Type类型、PropertyInfo和FieldInfo等。主要内容分为三部分:1) 获取Type类型信息的方法;2) 利用PropertyInfo类获取和操作属性信息;3) 通过FieldInfo类访问字段信息。文章还列举了反射中常用的类及其关键属性和方法,如MemberInfo基类、Type类、FieldInfo类和PropertyInfo类,并说明了它们在实际开发中的应用场景,如动态创建实例、访问私有成员、序列化等操作。
2025-12-10 19:21:29
939
原创 .NET进阶——深入理解反射(2)细说Type类型与实例创建
摘要 System.Type是.NET框架中表示类型元数据的核心类,提供对类型信息的访问。获取Type对象的主要方式包括:typeof()编译时获取、GetType()运行时通过实例获取、Assembly.GetType()动态加载程序集获取。Type对象可用于创建实例,包括无参构造(Activator.CreateInstance)、带参构造、非公共构造(如单例模式)以及泛型类型实例化(通过MakeGenericType)。特别要注意GetType()返回的是运行时实际类型而非声明类型。这些功能在反射、泛
2025-12-09 22:22:11
353
1
原创 .NET进阶——深入理解反射(1)反射入门
C# 反射机制完整指南 本文全面介绍了C#中强大的反射机制,主要内容包括: 反射核心概念:程序运行时动态获取和操作类型信息的能力,包括获取类型、创建实例、调用方法等。 核心组件:System.Reflection命名空间下的关键类(Type、Assembly、MethodInfo等)及其作用。 基础操作: 获取类型的3种方式 动态创建实例的2种方法 动态调用方法 访问/修改属性和字段 处理泛型类型 应用场景:反射是实现灵活设计(如工厂模式、依赖注入)的核心工具,但也需注意性能开销和封装性问题。 文章通过代码
2025-12-09 22:21:22
801
1
原创 .NET进阶——深入理解泛型(4)泛型的协变逆变
摘要: 协变(Covariance)和逆变(Contravariance)是泛型接口/委托的类型转换规则,仅适用于引用类型。协变通过out关键字允许子类泛型隐式转为基类泛型(如IEnumerable<子类>→IEnumerable<基类>),确保安全读取;逆变通过in关键字允许基类泛型隐式转为子类泛型(如Action<基类>→Action<子类>),实现操作复用。例如,IEnumerable<out T>支持协变,IWriter<in T&g
2025-12-07 15:06:25
364
原创 .NET进阶——深入理解泛型(3)泛型约束
泛型约束通过设定类型参数的准入规则,在保留泛型灵活性的同时确保类型安全。它解决了无约束泛型的四大痛点:无法调用类型成员、类型不安全、性能损耗和语义模糊。核心作用包括编译时类型检查、允许调用特定成员、避免装箱拆箱和提升代码可读性。常见约束类型有引用/值类型约束、接口约束、基类约束和无参构造函数约束等,可根据项目需求灵活组合使用,实现安全高效的泛型编程。
2025-12-07 15:05:24
801
原创 .NET进阶——深入理解泛型(2)泛型类泛型接口
泛型类通过类型参数实现代码复用,解决非泛型类需要为不同类型重复创建相似类的问题。其核心是让类的属性和方法支持动态类型,使用时才指定具体类型。泛型类可添加约束条件限制类型范围,确保类型安全。典型应用场景包括商品信息管理、API统一返回结果等,具有代码复用、类型安全、无性能损耗等优势。泛型类与泛型方法、泛型委托共同构成了C#泛型编程的核心要素。
2025-12-06 00:11:47
417
原创 .NET进阶——深入理解泛型(1)泛型入门
泛型是解决代码冗余的有效方案,它通过延迟类型绑定,让一个方法适配多种类型。相比重复编写类型专用方法或使用Object类型,泛型兼具简洁性、类型安全和性能优势。定义时用类型占位符(如T),调用时指定具体类型,编译器会生成专用代码,避免装箱拆箱损耗。泛型方法支持显式指定和隐式推导两种调用方式,扩展性强,新增类型无需修改代码。关键优势在于彻底消除冗余的同时保证类型安全和运行效率,是现代.NET开发的推荐方案。
2025-12-06 00:10:49
498
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅