- 博客(153)
- 收藏
- 关注
原创 C语言 堆区和栈区
C语言中的栈区(Stack)和堆区(Heap)是程序运行时内存布局中最核心的两个区域。它们的区别不仅在于存储内容,更在于管理方式、生命周期和性能特征。以下是系统性的对比与深度解析:可通过 (Linux)查看当前栈大小限制。这是初学者最常见的错误之一:永远不要返回局部变量的地址。一个典型 C 程序的进程内存从低到高为:
2026-10-07 00:55:39
169
原创 C语言 堆区和栈区
C语言中的栈区(Stack)和堆区(Heap)是程序运行时内存布局中最核心的两个区域。它们的区别不仅在于存储内容,更在于管理方式、生命周期和性能特征。以下是系统性的对比与深度解析:可通过 (Linux)查看当前栈大小限制。这是初学者最常见的错误之一:永远不要返回局部变量的地址。一个典型 C 程序的进程内存从低到高为:
2026-10-06 21:48:36
249
原创 C语言 单引号与双引号
在C语言中,""(双引号)和''(单引号)有着,它们代表完全不同的数据类型和内存模型。混淆这两者是初学者最常见的错误之一。
2026-10-02 00:59:04
243
原创 WPF PointAnimation
维度KeyFramesUsingPath轨迹形状仅直线折线 / 分段曲线任意连续曲线速度控制仅匀速每段独立控制由路径长度均匀分配复杂度⭐⭐⭐⭐⭐⭐灵活性低最高中(轨迹固定)平台支持仅 WPF典型用途简单位移复杂编排、弹性动效弧线/曲线轨迹。
2026-08-14 17:25:26
252
原创 C# 泛型
泛型约束是 C# 泛型系统的“类型契约机制”。它通过在编译期限定类型参数的能力边界,使泛型代码既能保持高度复用性,又能获得强类型安全和丰富语义。掌握约束的本质,就是掌握如何在“通用”与“专用”之间取得精确平衡。
2026-08-08 11:37:23
197
原创 Asp.net Core TagHelper
Tag Helper = 用写 HTML 的方式调用服务端逻辑。它是 ASP.NET Core 对 Razor 视图体验的核心改进,让服务端渲染的代码既保持了 HTML 的可读性,又拥有了 C# 的强大能力。如果你还在用,是时候全面迁移到 Tag Helper 了。
2026-08-07 14:06:07
266
原创 ASP.NET Core 配置系统优先级
当你手动添加配置源时,代码中的调用顺序直接决定了优先级.AddJsonFile("custom-low.json") // 优先级较低// 优先级较高(覆盖上面的同名键)如果需要在所有默认源之后追加一个最高优先级的源,直接在之后调用即可;如果想让它优先级低于环境变量,则需要操作集合手动调整顺序。
2026-07-29 21:24:34
256
原创 ASP.NET Core 环境配置
ASP.NET Core 的环境机制是一个“约定优于配置”设置一个环境变量框架自动加载对应配置文件、切换中间件管道、调整日志级别你在代码中只需即可分支处理掌握这套机制,就能做到一套代码、多套配置、零改动部署。
2026-07-26 20:22:39
263
原创 ASP.NET Core 中获取注入服务的所有方式
适用于:Controller、Service、Repository、ViewComponent、Middleware 类、HostedService 等所有由 DI 容器管理的类。3. Razor 视图中 4. 从 手动获取典型使用场景:在静态方法、事件回调、或无法使用构造函数注入的地方。典型场景:、 回调、 中需要 Scoped 服务。7. (手动创建实例)典型场景:工厂模式、动态创建类型实例。
2026-07-25 21:55:41
181
原创 C# ThreadPool 详解
日常开发中,你几乎不需要直接调用。用Task.RunParallel即可,它们底层全部基于线程池。直接操作ThreadPool的场景仅限于:设置 MinThreads、注册等待句柄、或编写底层基础设施库。永远不要在线程池线程上同步阻塞.Result.Wait()在池线程中)长任务用,别占池线程池是后台线程,不能用来维持进程存活。
2026-07-24 23:48:01
275
原创 Asp.net core Controller传值到视图的几种方式
在 ASP.NET Core MVC 中,从 Controller 向 View 传递数据并非依赖某种“自动绑定”,而是通过(通常是ViewResult)作为载体,在单次请求生命周期内完成的显式传递。
2026-07-19 16:53:19
190
原创 Asp.net core ViewData的使用
Get} } // View 中使用 var user = ViewData . Get < User >("User");// View 中使用} } // View 中使用 var user = ViewData . Get < User >("User");} } // View 中使用 var user = ViewData . Get < User >("User");
2026-07-19 16:45:00
178
原创 C# yeild的使用
如果你想让你自己写的类支持foreach循环,就可以用yieldi >= 0;i--)// 使用时:// 输出 5, 4, 3, 2, 1, 0yield的本质是状态机。C# 编译器在底层帮你把yield方法编译成了一个复杂的类,自动帮你保存了局部变量和执行位置。一句话口诀:当数据量很大,或者数据是按需生成的,且你只需要用foreach去遍历它时,果断使用。
2026-07-18 12:35:34
286
原创 Asp.net core 模型数据验证
if (!return new ValidationResult("请输入有效的中国大陆手机号");// 使用set;
2026-07-13 21:47:20
395
原创 Asp.net core 模型绑定
在 ASP.NET Core 中,模型绑定(Model Binding)是将 HTTP 请求中的数据(如路由参数、查询字符串、请求体等)自动映射到控制器 Action 方法参数的过程。当多个数据源中存在同名参数时,框架会按照一个固定的来决定使用哪个值。
2026-07-13 00:24:01
311
原创 Asp.net core ActionResult继承类
在 ASP.NET Core 中,是一个抽象基类,框架提供了大量继承自它的具体返回类型。为了方便记忆和查阅,以下按对所有常见的。
2026-07-12 15:01:07
183
原创 Asp.net core 返回类型
返回类型优点缺点适用场景极其灵活,可返回任意 HTTP 状态码类型不明确,对 API 文档不友好需要返回多种复杂结果(如文件、重定向)的传统 API类型安全,对 API 文档友好,且足够灵活比直接返回object稍显冗长现代 Web API 的首选,特别是需要生成 Swagger 文档时objectT代码最简洁只能返回 200 OK,无法处理错误状态极其简单的、只读的内部 API 或原型开发在开发现代的 ASP.NET Core Web API 时,优先使用。
2026-07-12 14:54:49
241
原创 WPF TemplateBinding
下面用一个完整的 Button 模板展示 TemplateBinding 的典型用法:-- ✅ 通过 Setter 设置默认值,而非直接在 Button 上写 --></Border></Trigger></Trigger></Trigger>-- ✅ 通过 Setter 设置默认值,而非直接在 Button 上写 --></Border></Trigger></Trigger></Trigger>
2026-05-27 23:32:05
519
原创 WPF视觉树 逻辑树
需要找DataContext、Resource、属性继承→ 用逻辑树需要找模板零件、绘制层、命中测试、动画目标→ 用视觉树需要找模板内命名的 PART_xxx→ 优先用(最高效)不确定时用哪个 →先逻辑树,再视觉树(逻辑树更小更快,能解决大部分业务问题)掌握这两棵树的区别和使用方法,你就拥有了透视 WPF 界面的“X光眼”,无论是排查绑定失败、定制控件外观还是优化渲染性能,都能做到心中有数、手中有术。
2026-05-27 22:25:26
445
原创 WPF 三大模板类型 四大属性名称
属性是通用的,模板类型也是通用的,只是不同的控件基类提供了不同的属性入口。Control 管外壳,ItemsControl 管列表内容和布局,ContentControl 管单个内容。掌握了继承体系,你就不会再被“这是不是某个控件专属”的问题困扰了。
2026-05-27 22:01:28
372
原创 WPF中Style和ControlTemplate的触发器有什么不同
如果你只是想根据状态改变控件的常规外观(如字体颜色、整体透明度),优先使用,这样更加解耦,即使以后换了模板也能生效。如果你在做深度定制化的控件,需要根据状态去改变模板内部某些特定元素的布局、显隐或复杂样式,那就必须使用配合TargetName来实现。
2026-05-24 22:36:18
291
原创 WPF 多值转换器
多值转换器(MultiValueConverter)其实就是普通的“升级版”。它专门用来解决**“多个后台数据共同决定一个界面属性”**的场景。在 WPF 中,它的实现依赖于接口和标签。
2026-05-20 23:11:43
346
原创 WPF 转换器
在 WPF 的数据绑定中,(值转换器)扮演着**“翻译官”数据类型不匹配显示格式不一致**的问题。比如:后台有一个bool类型的属性表示“是否保存”,但界面上的按钮需要的是Visibility(可见/隐藏);或者后台是一个DateTime时间,界面只想显示“yyyy-MM-dd”格式的字符串。这时候就需要用到。
2026-05-20 23:00:59
306
原创 WPF Border
在 WPF(Windows Presentation Foundation)中,Border是一个非常基础且实用的装饰控件。它的核心作用就是。简单来说,它就像是一个“画框”或“容器”,你可以把文字、按钮或者其他布局面板放进去,给它们加上漂亮的边框和底色。以下是Border。
2026-05-16 21:25:24
386
原创 C# WIFI连接状态检测方法
检测方法可靠性速度说明ping⭐ 低快ARP缓存影响,不可靠⭐⭐⭐ 高快检查OperationalStatus,较可靠WMI查询⭐⭐⭐⭐ 很高中检查NetEnabled标志,最准确获取SSID⭐⭐⭐⭐⭐ 最高中直接查询连接的热点名称,最直接。
2026-05-12 19:05:20
229
原创 C语言 文件
在C语言中,文件是实现的核心手段。程序运行时产生的数据默认存放在内存中,一旦程序结束,这些数据就会丢失。通过文件操作,我们可以将数据保存到硬盘上,以便长期存储和重复使用。C语言通过标准库<stdio.h>中定义的一系列函数和FILE结构体来管理文件操作。
2026-05-03 22:40:00
397
原创 C语言 动态内存管理
stdlib.h>“你申请的每一块内存,都必须亲手归还。掌握malloccallocrealloc和free的正确使用,是编写健壮、高效 C 程序的基础。务必养成良好的内存管理习惯,避免常见陷阱。如需进一步了解内存布局(栈 vs 堆)、内存对齐或高级技巧(如内存池),可继续提问!
2026-04-28 21:53:54
400
原创 C语言 联合
int i;float f;上述代码定义了一个名为Data的联合体,包含三个成员:整型i、浮点型f和字符数组str。联合体是 C 语言中一种高效利用内存的工具,适用于需要在不同类型间复用同一内存区域的场景。虽然使用需谨慎,但在底层开发、嵌入式系统和性能敏感代码中非常实用。
2026-04-27 21:27:43
235
原创 C语言 函数指针
函数在内存中也有固定的存储地址(即函数的入口地址)函数指针就是存储这个地址的“容器”通过函数指针可以间接调用函数,甚至动态切换调用的函数运行时动态调用函数的能力解耦代码,提高模块化程度实现回调机制和事件驱动编程构建通用算法(如排序、搜索)实现状态机和插件系统掌握函数指针是成为 C 语言高级开发者的必经之路!
2026-04-21 23:22:54
442
原创 反射创建对象实例的两种方式
追求便捷,低频使用:如果你的场景是偶尔创建一次对象,对性能不敏感,那么 Activator.CreateInstance是更简单直接的选择。追求性能,高频使用:如果你需要在循环中或框架底层频繁创建对象,ConstructorInfo.Invoke配合缓存是绝对的首选方案。这是构建高性能依赖注入(DI)容器、ORM 框架等场景下的标准做法。
2026-04-20 16:15:22
221
原创 C语言 基础问题整理
在 VS Code 中,默认情况下每个.c文件是独立编译的,这是因为其默认配置通常只编译当前活动的文件。要将多个.c文件“合成一个整体”进行编译和运行,核心是修改项目的构建配置文件tasks.json。这里有两种主流方法,推荐使用第一种,它更简单快捷。
2026-04-12 17:57:13
211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅