net
-
.NET中的表达式树(Expression Trees)是什么?如何动态构建和编译代码?
表达式树将代码表示为可分析和修改的树状数据结构,常用于LINQ to Entities中将查询转换为SQL。通过Expression.Parameter、Expression.Constant等节点可动态构建表达式,再用Lambda封装并Compile生成委托执行,支持运行时动态构造逻辑,适用于动态…
-
C# IHostedService的用法 – 在ASP.NET Core中运行后台任务
IHostedService是ASP.NET Core中用于托管长时间运行后台任务的接口,含StartAsync(启动时执行)和StopAsync(关闭时优雅停止)方法;可通过实现该接口或继承BackgroundService(提供ExecuteAsync抽象方法)来创建定时任务、消息队列处理等服务…
-
C# 如何读取应用程序的配置文件 – ConfigurationManager vs IConfiguration
答案:.NET Framework 用 ConfigurationManager 读 XML 配置,.NET Core+ 用 IConfiguration 支持多源配置。1. ConfigurationManager 仅适用于 .NET Framework,依赖 app.config/web.con…
-
C# IAsyncEnumerable与yield return – 高效处理异步数据流
IAsyncEnumerable 是 .NET Core 3.0 引入的异步枚举接口,结合 yield return 可实现高效异步数据流处理,适用于文件读取、网络请求等场景,支持 await foreach 消费,具有内存友好、响应快、代码简洁等优势,需注意资源释放和运行环境限制。 <img…
-
C# ASP.NET Core中的认证与授权 – JWT Bearer入门
在ASP.NET Core中实现JWT认证需配置服务、签发Token并验证签名。1. 在Program.cs中通过AddAuthentication().AddJwtBearer()注册JWT支持,设置密钥、ValidIssuer、ValidAudience等参数;2. 登录成功后构建Claim数组…
-
.NET中的函数式编程实践:告别复杂的面向对象设计
.NET并非仅支持面向对象,C#自3.0起已引入函数式特性。1. 使用record定义不可变类型,如public record Person(string Name, int Age);2. 编写纯函数确保相同输入返回相同输出且无副作用,例如public static bool IsAdult(Pe…
-
C# 扩展方法的定义与使用 – 如何为现有类型添加新功能
扩展方法是定义在静态类中的静态方法,通过this修饰第一个参数为现有类型“添加”新功能,如为string添加Truncate、IsNullOrEmpty等方法,调用时像实例方法一样使用,广泛用于LINQ和增强内置或第三方类型。 扩展方法允许你在不修改原始类型、不创建派生类或重新编译的情况下,为现有类…
-
什么是.NET的JIT编译器?从IL代码到本机代码的转换过程
IL代码是.NET编译器生成的平台无关中间语言,JIT编译器在运行时将其转换为特定CPU架构的本机代码,实现跨平台运行与性能优化。1. 编写C#等语言代码后,编译生成IL并存储于程序集;2. 程序运行时,方法首次调用触发JIT;3. JIT验证IL并编译为本地机器码;4. 编译结果缓存,后续调用直接…
-
C#中的依赖注入(DI)是什么 – ASP.NET Core中的三种生命周期
依赖注入(DI)是 ASP.NET Core 的核心机制,通过 Transient、Scoped、Singleton 三种生命周期管理服务实例:Transient 每次请求新建实例,适合无状态轻量类;Scoped 每请求一个实例,适用于 DbContext 等需上下文绑定的服务;Singleton …
-
C# 如何进行异步文件I/O操作 – ReadAsync和WriteAsync
ReadAsync和WriteAsync需配合FileOptions.Asynchronous创建FileStream才能真正异步,否则退化为同步;推荐复用ArrayPool.Shared缓冲区,File类静态方法适合小文件但不适用于超大文件。 在 C# 中,ReadAsync 和 WriteAsy…