<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[CSDN_RTKLIB的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/CSDN_RTKLIB</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; CSDN_RTKLIB]]></copyright><item><title><![CDATA[接口实现类扩展公有方法]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364792</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364792</guid><author>CSDN_RTKLIB</author><pubDate>Mon, 14 Sep 2026 23:20:44 +0800</pubDate><description><![CDATA[实现类可以添加自身私有辅助函数✅实现类可以添加对外的公共独有函数✅如果你确认当前实例是某个具体Parser，is判断后强转为具体类，就可以调用它独有的public方法 ✅小提醒：工厂返回的是，拿到这个引用默认看不到子类额外公共方法，必须强转。最理想状态就是接口定义了下面具体实现子类的所有支持方法，结合工厂模式，代码中无论是哪种模式都是一样代码，最多就是修改工厂调用参数，告诉工厂创造哪个具体子类，达到多态编程目的。✅ 完全正确（你说的泛型编程这里准确来说是多态编程，泛型是另一个概念）。]]></description><category></category></item><item><title><![CDATA[C# 静态成员加载]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364631</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364631</guid><author>CSDN_RTKLIB</author><pubDate>Mon, 14 Sep 2026 23:15:33 +0800</pubDate><description><![CDATA[接口不能定义实例字段（类成员变量），只能定义【属性/方法/事件】契约。// ✅ 允许：属性（本质是get/set方法契约，不是字段）set;// ❌ 编译报错！接口不能写实例字段字段（成员变量：存数据的内存容器，接口禁止属性set;：声明get、set两个方法，属于行为契约，接口可以写补充：C#8+接口可以有静态字段，但绝对不能放实例状态，而且你是 .NET4.7，用不了。👉 接口只定义「能力契约」，不承载存储数据的变量；变量只能写在**实现这个接口的具体类（XDataStore这类）**里面。]]></description><category></category></item><item><title><![CDATA[策略模式+ 简单工厂模式]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364552</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364552</guid><author>CSDN_RTKLIB</author><pubDate>Mon, 14 Sep 2026 23:05:51 +0800</pubDate><description><![CDATA[运行时，用户改json配置，点击刷新，程序要切换到另一种存储实现（XData ↔ XRecord ↔ BlockAttr）。ZWCAD插件大多是单线程CAD命令上下文，一般不用锁，但要知道这个风险。可以放到静态初始化，避免反复ReloadStore的时候重复执行注册。两者经常成对出现，是.NET插件、CAD二次开发里最常用的一套组合。程序启动读一次配置，全程不变 → 单例完全没问题，只创建一次实例。缺点：每次读写属性都读磁盘配置文件，频繁IO，性能差。不要把实例做成静态只读单例，而是用一个静态。]]></description><category></category></item><item><title><![CDATA[实例无状态，静态类接口实例能不能混用]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364444</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364444</guid><author>CSDN_RTKLIB</author><pubDate>Mon, 14 Sep 2026 23:00:04 +0800</pubDate><description><![CDATA[无状态 = 对象实例不保存业务数据，所有数据都通过方法参数传入。你的Store子类刚好满足。单例不是为了省内存，是为了：一次读取配置、一次性初始化CAD资源、统一管控实例；内存几乎没有差别。静态方法不能实现运行时多态，不能当接口契约。但是可以把底层核心逻辑保留为静态工具类，接口实例仅仅作为一层薄适配器包装它。]]></description><category></category></item><item><title><![CDATA[策略模式 + 接口抽象 + 工厂模式]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364339</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364339</guid><author>CSDN_RTKLIB</author><pubDate>Mon, 14 Sep 2026 22:52:09 +0800</pubDate><description><![CDATA[CAD实体，块参照/曲线等</param>/// <param name="key">键名</param>/// <param name="value">值不存在返回null]]></description><category></category></item><item><title><![CDATA[抽象基类与接口]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364128</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/165364128</guid><author>CSDN_RTKLIB</author><pubDate>Mon, 14 Sep 2026 22:44:56 +0800</pubDate><description><![CDATA[abstract多个子类，有大量【共用代码/共用状态】，只有部分逻辑不一样有公共代码复用，选抽象类你的管网场景举例：都有：编号、管径、起点终点坐标（公共字段）都有：公共校验逻辑、公共读取XData方法（公共方法）只有拓扑计算每个管道算法不一样👉 这种就适合抽象基类：把公共属性、公共方法写在抽象基类，抽象方法留给子类重写。只能单继承。如果以后某个管道类，还想继承别的业务类，就不行了。抽象类 abstract class：is-a，有共用代码和状态，单继承，适合同类对象抽取公共逻辑。]]></description><category></category></item><item><title><![CDATA[树、图高层抽象模型]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164991854</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164991854</guid><author>CSDN_RTKLIB</author><pubDate>Fri, 11 Sep 2026 14:25:18 +0800</pubDate><description><![CDATA[树、图是高层抽象模型；Dictionary、vector、数组是底层基础容器。高层结构依靠底层容器组装实现；就像链表/数组可以搭出树，字典+List可以搭出邻接表形式的图。标准库不提供现成封装好的通用树、通用图类，全部自己封装。Dictionary≠ 图：字典只是经常被放在图类内部，充当存储邻接关系的零部件。]]></description><category></category></item><item><title><![CDATA[有向图Directed Graph]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885318</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885318</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 23:59:05 +0800</pubDate><description><![CDATA[边记作有序对uv：代表一条从的单向通路；u→v，和无向图核心区别就在这里。对比无向图：无向边((AB))等价双向两条有向边A→BA→BB→AB→A。]]></description><category></category></item><item><title><![CDATA[无向图Undirected Graph]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885191</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885191</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 23:43:35 +0800</pubDate><description><![CDATA[管线网络天然就是加权无向图：管段=无向边，检查井/节点=顶点，管长为边权重；邻接表（顶点数字ID优先，不要字符串字典，性能更好）；溯源上下游 = DFS；计算两点最短管线距离 = BFS(无权)/Dijkstra(有权)；判断两块区域是否连通、批量合并 = 并查集；查找关键主干管线（桥） = Tarjan算法。如果你想要，我可以写一份C#通用无向图封装类，包含AddEdge、DFS、BFS、连通分量查询，直接适配你的管网项目。]]></description><category></category></item><item><title><![CDATA[树的遍历误区]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885178</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885178</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 23:42:37 +0800</pubDate><description><![CDATA[问：树里面有前、中、后序三种；广度优先、深度优先遍历树时，是不是各自对应其中一种？深度优先DFS包含前序、中序、后序三种遍历，不是一一对应；广度优先BFS（层序遍历）是独立的一套，不对应前中后序任何一个；DFS、BFS两种策略都可以应用在树上，也都可以应用在图上。]]></description><category></category></item><item><title><![CDATA[广度优先(BFS) & 深度优先(DFS)]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885161</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164885161</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 23:41:18 +0800</pubDate><description><![CDATA[特性DFS 深度优先BFS 广度优先数据结构栈（递归/手动Stack）队列（Queue）遍历方式纵深优先，一路到底再回溯横向扩散，一层一层典型用途连通块、回溯、搜索所有可行方案无权图最短路径、层次遍历空间消耗取决于最深深度（树高度）取决于最宽一层（树最大宽度）]]></description><category></category></item><item><title><![CDATA[空间哈希与拓扑缓存]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164867981</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164867981</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 17:40:03 +0800</pubDate><description><![CDATA[索引结构分桶公式（固定Floor，杜绝Round）查询范式目标点算出(bx0,by0)，循环dx:-1,0,1dy:-1,0,1读取邻桶候选，候选必须再DistanceTo校验。]]></description><category></category></item><item><title><![CDATA[暴力预构建拓扑]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164857345</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164857345</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 16:02:27 +0800</pubDate><description><![CDATA[根源：管线端点用单个ObjectId，加上break只取首个匹配项，多管点场景发生覆盖丢失；修复手段：起点、终点关联管点升级为集合，删除循环内break；配套优化：ConnectedLines使用HashSet消除管线ID重复添加；中长期性能优化：暴力双层循环替换为空间哈希邻域检索。如果你写的方案思路和上面一致，说明咱们想法是吻合的。图纸数据量不大（几百以内管点、管线）；一次构建拓扑，然后大量、反复进行连通性分析、批量检查、重复点处理；]]></description><category></category></item><item><title><![CDATA[Floor分桶、8邻域九宫格]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164824882</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164824882</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 12:17:56 +0800</pubDate><description><![CDATA[Bucket（桶）：来自哈希表术语，空间哈希把空间网格叫做桶；起源于图形/物理引擎，后被GIS、CAD二次开发广泛使用；GIS里常叫Cell单元格；用网格桶编号做字典key，存储空间实体，这就是空间哈希，属于空间索引的一种；核心目的：空间邻近查询，规避O(N²)暴力两两距离计算。]]></description><category></category></item><item><title><![CDATA[Round 分组问题]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164823055</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164823055</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 11:59:23 +0800</pubDate><description><![CDATA[对点集合`allPoints(x,y)GroupByCAD管网场景典型用途：查找坐标误差范围内重合的节点、重复测点。]]></description><category></category></item><item><title><![CDATA[哈希基础介绍]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164814026</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164814026</guid><author>CSDN_RTKLIB</author><pubDate>Thu, 10 Sep 2026 10:36:48 +0800</pubDate><description><![CDATA[哈希函数：接收一个任意长度/任意类型的输入，算出一个固定大小的数字（哈希值）。目标：把复杂、不定型输入，映射成简单固定大小的值；输入稍微变一点，输出哈希值就大变。hashinput→固定长度数字hash(input) \rightarrow \text{固定长度数字}hashinput→固定长度数字哈希（hash）：一种把任意输入映射成固定大小数字的单向映射函数；诞生于计算机算法，哈希表用哈希函数实现快速查找；哈希表里面存放元素的槽位，取名叫桶Bucket。]]></description><category></category></item><item><title><![CDATA[Aspose.Cells 与 NPOI]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164750827</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164750827</guid><author>CSDN_RTKLIB</author><pubDate>Wed, 09 Sep 2026 17:40:50 +0800</pubDate><description><![CDATA[NPOI 是 Java Apache POI 的.NET移植，开源免费（旧版2.7.6及之前Apache2.0完全免费），无需安装Office。]]></description><category></category></item><item><title><![CDATA[嵌套方案和平级方案对比]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164591126</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164591126</guid><author>CSDN_RTKLIB</author><pubDate>Tue, 08 Sep 2026 11:30:04 +0800</pubDate><description><![CDATA[维度A 嵌套 EntityDataB 平级 XDataEntityData（子命名空间）语义关联⭐⭐⭐⭐⭐ 强，一眼知道归属⭐⭐⭐ 需要命名+注释维护序列化/反射容易踩坑几乎无坑，CAD项目友好代码签名、业务传参签名长清爽简洁复用性只能XDataHelper内方便new其他工具类也可复用命名污染无用子命名空间即可规避新人阅读需要理解嵌套规则零理解成本内部CAD工具库，业务频繁消费数据，B更务实；通过子命名空间+注释弥补语义短板。]]></description><category></category></item><item><title><![CDATA[静态类里嵌套非静态类]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164588113</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164588113</guid><author>CSDN_RTKLIB</author><pubDate>Tue, 08 Sep 2026 11:12:41 +0800</pubDate><description><![CDATA[外层静态类是工具/操作类；内部嵌套类是数据模型。外层不能new，但是内部可以new实例。静态类本身不能实例化，所有直接成员必须static；但嵌套类型不受该约束。静态外层 = 工具工具箱；非静态嵌套类 = 工具箱产出的数据袋子。工具箱本身不用new，但每一份数据要new袋子装起来。嵌套用来表达：这个数据袋子专属于这个工具箱。]]></description><category></category></item><item><title><![CDATA[图层锁定(Locked) vs 图层冻结(Frozen)]]></title><link>https://blog.csdn.net/CSDN_RTKLIB/article/details/164460847</link><guid>https://blog.csdn.net/CSDN_RTKLIB/article/details/164460847</guid><author>CSDN_RTKLIB</author><pubDate>Mon, 07 Sep 2026 14:43:14 +0800</pubDate><description><![CDATA[很多人容易混淆冻结和锁定。]]></description><category></category></item></channel></rss>