【发布时间】:2014-12-01 05:19:19
【问题描述】:
我有一个具有如下属性的低级类:
public IDictionary<IHttpParam, IHttpArg> Parameters {get;}
我的一个更高级别的类使用这个类,但也公开了它自己的称为参数的属性,但类型不同:
public IDictionary<CommandParameter, ICommandArgument> Parameters {get;}
CommandParameter 实现了 IHttpParam 接口,而 ICommandArgument 扩展了 IHttpArg 接口,所以理想情况下,我希望能够像这样实现它:
public IDictionary<CommandParameter, ICommandArgument> Parameters { get { return this.httpReq.Parameters; } }
不幸的是,这是不可能的,因为 IDictionary 接口上缺乏协方差。我了解它无法支持此语言功能的技术原因,但解决此问题的最佳方法是什么?
我想一种选择是创建并返回一个包装器IDictionary<TKey, TVal>,它将所有对IDictionary<CommandParameter, ICommandArgument> 的调用转换为对底层IDictionary 的调用。包装器将通过从一个接口到另一个接口的大量转换来实现这一点,我认为这可能会损害性能。有没有更好的解决方案?
谢谢。
【问题讨论】:
标签: c# .net dictionary casting covariance