类型约束

ca9*_*3d9 3 .net c# oop generics class

我有以下类层次结构.

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 { .... }
Run Code Online (Sandbox Code Playgroud)

是否有可能有编译时检查的类型Item,以确保它的IEnumerable<ItemA>,IEnumerable<ItemB>对于ItemAItemB分别?有没有更好的设计?

car*_*ira 6

您可以更改Header类的定义以将type参数传递给它,然后您可以强制执行:

    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 { }
Run Code Online (Sandbox Code Playgroud)

  • 你还会考虑添加一个约束`where TItem:Item`? (2认同)