假设您正在编写一个库以在屏幕上显示内容,则创建一个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 做太多事情,但没有理由很难说。 –
2009-08-29 17:58:06