我的中间层有一个方便的集合,用于收集属于父事物的子事物。
public class ChildCollection<TParent, TChild>
{
public IEnumerable<TChild> GetChildren();
etc.
}
在界面中,我有一个方便的网格,可以显示 ChildCollection<TParent,TChild> 的内容并让用户对其进行操作。
public abstract class ChildCollectionGrid<TCollection, TParent, TChild> : MyGridControl
where TCollection : ChildCollection<TParent, TChild>
{
public abstract TCollection Collection;
etc.
}
继承此类以使网格与 Widget 上的 Waffles 一起使用最终看起来像这样。
public class WidgetWafflesGrid : ChildCollectionGrid<WidgetWafflesCollection, Widget, Waffle>
这有点多余。WidgetWaffleCollection是ChildCollection<Widget,Waffle>。指定第一个泛型类型参数后,除非您准确指定另外两个,否则该类将无法编译。
有没有更漂亮的方法来实现这一点,编译器可以推断出其他两种类型?我知道我很挑剔,但理想情况下我希望类声明看起来像:
public class WidgetWafflesGrid : ChildCollectionGrid<WidgetWafflesCollection>
谢谢你的帮助!