拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Jot继承机制深度解析:一次配置基类,派生类自动复用状态跟踪规则

Jot继承机制深度解析一次配置基类派生类自动复用状态跟踪规则【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot在.NET桌面应用开发中Jot是一个轻量级的状态持久化库帮助开发者轻松保存和恢复窗口位置、尺寸等应用状态。而Jot继承机制是其中最巧妙的设计之一你只需要为基类配置一次状态跟踪规则所有派生类就会自动复用这套规则无需重复编写任何配置代码。本文将带你从零理解Jot继承机制的工作原理、核心源码与实战用法。为什么要关注Jot继承机制在传统开发中如果一个应用里有几十个窗口、面板或控件你需要为每一个类型编写独立的配置代码——定义要跟踪哪些属性、何时保存、如何识别对象。这不仅冗长而且极易出错。Jot的继承机制彻底解决了这个问题传统方式Jot继承机制每个类型单独配置基类配置一次派生类自动继承大量重复代码只需为派生类补充特有属性修改规则要改多处改基类配置全局生效继承机制的核心原理配置查找与复制 Jot继承机制的灵魂代码位于 Tracker.cs 中的Configure(Type t)方法第163-184行。当Jot需要为某个类型创建跟踪配置时它遵循以下逻辑先查精确类型如果该类型已有配置直接返回递归查找基类通过FindConfiguration方法第186-197行沿着继承链向上递归寻找最近的已配置祖先类型复制基类配置找到后使用new TrackingConfiguration(baseConfig, t)创建派生类的新配置并复制基类的全部规则复制配置时到底复制了什么打开 TrackingConfiguration.cs 第59-78行你会看到构造函数TrackingConfiguration(TrackingConfiguration baseConfig, Type targetType)会完整复制以下内容ID获取函数idFunc决定如何唯一标识对象全部跟踪属性TrackedProperties要保存哪些属性持久化触发器PersistTriggers何时触发保存各阶段回调应用前、持久化前、应用后、持久化后的处理逻辑这意味着基类的状态跟踪规则是整体复制给派生类的派生类配置基于此再叠加自己的新规则。实战示例Form 与 MyForm 的继承配置 假设你的应用有多个窗体你想统一跟踪窗体的尺寸和位置同时某个特殊窗体还想额外跟踪一个Tab页索引// 1. 为基类 Form 配置跟踪规则仅此一次 tracker.ConfigureForm() .Id(f f.Name, SystemInformation.VirtualScreen.Size) .Properties(f new { f.Height, f.Width, f.Left, f.Top, f.WindowState }) .PersistOn(nameof(Form.Closing)) .StopTrackingOn(nameof(Form.Closed)); // 2. 为派生类 MyForm 补充自己的属性 tracker.ConfigureMyForm() .Properties(f f.tabControl1.SelectedIndex);看到了吗MyForm的配置中不需要重复任何尺寸、位置、触发事件的设置——这些全部从Form的配置中自动复制过来了。你只需专注新增的部分。这正是一次配置基类派生类自动复用状态跟踪规则的精髓。Jot继承机制的三大黄金特性 ⭐特性一就近继承Jot会寻找继承链上最近的已配置祖先。如果MyForm : SpecialForm : Form而只有Form和SpecialForm有配置那么MyForm会继承SpecialForm的配置两者都在FindConfiguration的递归查找范围内。特性二规则叠加不覆盖继承时是复制新增不是覆盖。基类已有的跟踪属性和触发事件会保留派生类新增的属性会被追加到同一份配置中。测试用例Persist_BaseAndOwnedProperties见 TrackerTests.cs 第432-465行验证了基类与派生类属性可以同时被持久化。特性三未配置派生类也生效即使你没有为MyForm显式调用ConfigureMyForm()Jot在跟踪MyForm实例时也会自动使用Form的配置——跟踪时Configure(target.GetType())会走同样的继承查找逻辑。继承机制中的注意事项 ⚠️配置按类型缓存_typeConfigurations字典为每个类型缓存配置ReturnSameConfig_IfSameTarget测试保证同一类型返回同一配置实例。属性名称冲突继承的属性与新增属性使用属性名作为存储键新增属性请避免与基类属性重名。触发事件也会继承基类配置中的PersistOn触发器会一并复制派生类实例触发这些事件同样会持久化状态。推荐阅读的源码文件 Tracker.cs继承查找与配置创建的核心入口Configure与FindConfigurationTrackingConfiguration.cs配置复制构造函数与属性注册TrackerTests.csPersist_UsingBaseConfiguration等继承相关测试Foo2.cs演示派生类测试数据Foo2 : Foo总结 Jot继承机制让状态跟踪规则的复用变得前所未有的简单配置一次基类整个继承体系自动受益。无论你有10个窗体还是100个控件都只需要为公共基类写一份配置派生类通过复制扩展的方式自动复用。这不仅大幅减少了样板代码还让跟踪规则的管理变得集中、清晰、易于维护。如果你正在开发WPF、WinForms或Avalonia应用Jot的继承机制绝对是值得你掌握的高效状态持久化方案。【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门