.NET Framework 4.8 接口层级结构及接口合并问题
.NET Framework 4.8 接口层级结构及接口合并问题
嘿,这个场景太常见了,咱们来捋捋怎么优雅解决~
首先,既然每个带Texture的类都必然有Name,那用接口继承是最适合的方案——既不破坏你原来依赖泛型约束的代码,又能实现属性的复用和接口的层级化。
推荐方案:接口继承
让ClassTexture继承ClassType,这样实现ClassTexture的类会自动要求实现name属性,完美匹配你的业务逻辑:
internal interface ClassType { string Name { get; set; } // 小提示:C#里建议用帕斯卡命名法(PascalCase),更符合规范哦 } internal interface ClassTexture : ClassType { string Texture { get; set; } }
这样做的好处:
- 所有实现
ClassTexture的类必须同时实现Name和Texture,满足你“有Texture就有Name”的要求 - 原来的泛型约束
Where T : ClassType依然可以用在只需要Name属性的场景 - 新的泛型约束
Where T : ClassTexture可以用在同时需要Name和Texture的场景 - 完全兼容你之前的代码,不需要大规模修改
备选方案:直接合并接口(谨慎使用)
如果你确定以后不需要单独使用ClassType接口,也可以直接把两个接口合并成一个,但这会影响原来依赖ClassType的泛型代码,所以除非你已经做好了全量替换的准备,否则不推荐:
internal interface IClassWithNameAndTexture { string Name { get; set; } string Texture { get; set; } }
另外额外提一句:这种接口继承的方式也符合面向对象的接口隔离原则——把通用的属性(比如Name)放在基础接口,更具体的属性(比如Texture)放在继承的接口里,后续如果有其他需要Name属性的接口,也可以继续继承ClassType,结构会非常清晰。
备注:内容来源于stack exchange,提问作者Filipe
相关产品推荐
相关产品推荐

