如何通过嵌套对象实现接口且无需逐个映射成员?一行代码实现接口映射
用嵌套对象一键实现接口,避免手动映射成员
在C#中,你可以通过显式实现接口并返回嵌套对象的方式,一次性将整个接口的实现委托给嵌套实例,无需手动逐个映射接口成员。
修改后的代码
把你示例中Builder类里的两行手动映射代码,替换成一行显式接口实现即可:
public interface IIndexer { int A { get; } void B(int value); } public interface IBuilder : IIndexer { int Q { get; } } public class Indexer: IIndexer { public int A { get; set; } public void B(int value) { /* 你的实现逻辑 */ } } public class Builder : IBuilder { // 实现IBuilder自身声明的成员 public int Q { get; set; } // 实现IIndexer的嵌套对象 private Indexer Index = new Indexer(); // 一行代码完成整个IIndexer接口的委托 IIndexer IBuilder => Index; }
原理说明
当你显式实现IBuilder接口并返回嵌套的Index对象时,.NET运行时会自动将IIndexer接口的所有成员调用转发到Index实例上。因为IBuilder继承自IIndexer,所以这个实现会覆盖整个父接口的所有成员需求,省去了逐个编写映射代码的麻烦。
注意事项
- 嵌套的
Indexer类必须完整实现目标接口(这里Indexer已经实现了IIndexer),否则会编译报错。 - 这种方式属于显式接口实现,只有当
Builder实例被转换为IIndexer或IBuilder接口类型时,才会使用该委托实现;直接使用Builder具体实例无法访问IIndexer的成员(如果需要直接访问,可以将Index设为public,但通常建议保持私有,通过接口规范访问)。
内容的提问来源于stack exchange,提问作者Simon Hooper
相关产品推荐
相关产品推荐

