【发布时间】:2010-11-24 00:36:26
【问题描述】:
假设您正在编写一个库来在屏幕上显示内容,因此您创建了一个IDisplayable 接口。此接口有一种方法可以从对象创建控件:displayable.GetControl()。
您想创建自己的可以显示的列表类型:MyList<T>。现在这个列表只有在T 是IDisplayable 时才能显示,所以你可以在 MyList 类中询问 T 应该实现 IDisplayable。但是当 T 不是 IDisplayable 时,您还希望在某些地方使用此列表类型(因此此列表将无法显示)。那么如果 T 实现了 IDisplayable,是否可以说 MyList 实现了 IDisplayable?如果MyList<T> 总是实现 IDisplayable 但如果您尝试调用 GetControl() 如果 T 不是 IDisplayable 时会在运行时抛出异常,我也会很高兴,但我想知道是否有一种静态类型安全的方法来做到这一点.这可以做到吗?还是我在寻找错误的解决方案?
编辑:
我同意到目前为止 MyList 可能有太多责任的建议。我最初的想法是创建一个MyDisplayableList<T> : MyList<T> (where T : IDisplayable)。
这种方法的问题在于,我有很多方法接受 MyList 并返回 MyList(例如 Linq 中的 Select 等方法)。因此,如果我在 MyDisplayableList 上使用 select,我会返回一个 MyList,即使它是一个 MyList,我也无法显示它......在 C# 中是否有一种类型安全的方法来处理这个问题?
【问题讨论】:
-
为什么你还想将 MyList
用于不可显示的类?在我看来,您要求 MyList 做太多事情,但没有原因很难说。
标签: c# generics types interface