C#中如何从多共享属性类提取公共接口?求工具推荐
解决方法
工具自动生成接口
- JetBrains ReSharper:选中所有7个目标类(DT2、IP2、OPDT2等),右键选择「重构」→「提取接口」,工具会自动扫描所有类的公共成员,你只需要在弹出窗口里勾选
tpl属性,就能一键生成包含该属性的接口,同时自动给选中的类添加接口实现。 - Visual Studio 进阶重构:先给其中一个类提取包含
tpl的接口,再依次选中其他6个类,右键选择「快速操作和重构」→「实现接口」,VS会自动匹配公共成员,帮你完成接口实现,比纯手动编写效率高很多。
手动辅助批量处理
如果没有付费工具,用文本编辑器的正则匹配也能快速搞定:
- 把所有7个类的代码粘贴到VS Code或Notepad++里
- 用正则表达式匹配
tpl属性,比如:public\s+(\w+)\s+tpl\s+\{ get; set; \} - 提取匹配到的内容,手动编写接口(比如
ITplContainer),再给每个类添加接口继承声明。
从根源解决(修改XSD)
既然代码是从XSD生成的,直接修改XSD更彻底:
在XSD中定义一个包含tpl属性的基类型,让那7个目标类型继承这个基类型,重新生成代码后,所有类会自动拥有共同的基类,遍历数组时直接转成基类型就能访问tpl,不用额外加接口。
最终使用示例
生成接口后,遍历数组时就不用switch和强制转换了:
public interface ITplContainer { string Tpl { get; set; } // 根据实际属性类型调整 } // 给每个类添加接口实现,比如: public class DT2 : ITplContainer { /* 原有代码 + Tpl属性 */ } // 遍历逻辑 foreach (var item in Items) { if (item is ITplContainer container) { string tplValue = container.Tpl; // 你的业务处理 } }
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

