类型约束类型

由网友(深冬入心)分享简介:我有以下的类层次结构。 I have the following class hierarchy. class Header { IEnumerable Item { get; set; } .... }class HeaderA : Header { .... } // Item should ha...

我有以下的类层次结构。

I have the following class hierarchy.

class Header { IEnumerable<Item> Item { get; set; } .... }
class HeaderA : Header { .... } // Item should have the type of IEnumerable<ItemA>
class HeaderB : Header { .... } // Item should have the type of IEnumerable<ItemB>

class Item { .... }
class ItemA : Item { .... }
class ItemB : Item { .... }

是否有可能有编译时检查对项目的类型,以确保它的的IEnumerable&LT;意达&GT; 的IEnumerable&LT; ItemB&GT; 意达 ItemB 分别是多少?有没有更好的设计?

Is it possible to have compile time checking on the type of Item to make sure it's IEnumerable<ItemA>, IEnumerable<ItemB> for ItemA and ItemB respectively? Is there any better design?

推荐答案

您可以更改标题类的定义,类型参数传递给它,那么你可以并处是:

You can change the definition of the Header class to pass the type parameter to it, then you could impose that:

    class Header<TItem> where TItem : Item { IEnumerable<TItem> Item { get; set; } }
    class HeaderA : Header<ItemA> { } // Item should have the type of IEnumerable<ItemA>
    class HeaderB : Header<ItemB> { } // Item should have the type of IEnumerable<ItemB>

    class Item { }
    class ItemA : Item { }
    class ItemB : Item { }
阅读全文

相关推荐

最新文章