我正在寻找一个C#替代C++ typedefs或特定类在特定情况下。我知道没有直接的等价物,但是对于这个特定的问题,可能还有其他解决方案?C#中的静态派生类型?
这是我想要做的。我正在编写一个有三种相关类型的框架。视图,后备存储和工厂。所有三个接口将会有多个实现。视图与工厂之间存在1-1关系,视图与存储之间存在1-N关系。一个具体的impl。的框架看起来像这样:
Storage : IStorage<int> ...
View : IView<Storage> ... // And IView<T> : IViewNonGeneric further up..
Factory : IFactory<Storage> {
// This needs to take a concrete storage type as arg
IViewNonGeneric CreateView(Storage s) ...
Storage CreateStorage() ...
}
View类是框架用户最重要的类;其他的都是一些实现细节。因此,根据View类来定义工厂(而不是根据存储)看起来更自然。在C++中,这将是简单的,只需添加一个typedef到视图,并在工厂里使用它,就像这样:
class IView<typename T> { typedef T TStorage; ...
class IFactory<typename T> {
IViewNonGeneric CreateView(typename T::TStorage s) ...
在C#中,我们显然不具备的typedef或traits类。有没有其他的方式来达到预期的效果?也就是说,是否可以使用View作为Factory的通用参数,并从View中派生出具体的Source类型?
是不够的,使用'where'仿制药申报约束的类型必须实施? – Tigran 2012-01-02 10:38:03