类型约束
我有以下类层次结构。
class Header { IEnumerable Item { get; set; } .... } class HeaderA : Header { .... } // Item should have the type of IEnumerable class HeaderB : Header { .... } // Item should have the type of IEnumerable class Item { .... } class ItemA : Item { .... } class ItemB : Item { .... }
是否可以对Item
的类型进行编译时检查以确保它们分别是ItemA
和ItemB
的IEnumerable
, IEnumerable
? 有没有更好的设计?
您可以更改Header类的定义以将type参数传递给它,然后您可以强制执行:
class Header where TItem : Item { IEnumerable Item { get; set; } } class HeaderA : Header { } // Item should have the type of IEnumerable class HeaderB : Header { } // Item should have the type of IEnumerable class Item { } class ItemA : Item { } class ItemB : Item { }
您应该使用通用类
您可以使用generics类型并将其传递给类。
public class Header where T : Item { IEnumerable Item { get; set; } } Header AHeader; Header BHeader;
像这样
class HeaderA : Header { .... } class HeaderB : Header { .... }
如果我正确理解您的问题,您可以更改Header类的签名来完成此操作。
class Header { IEnumerable Item {get; set;} ....} class HeaderA : Header { .... } class HeaderB : Header { .... } class Item { .... } class ItemA : Item { .... } class ItemB : Item { .... }
会导致HeaderA只允许ItemA对象,而HeaderB只允许将ItemB对象放入各自的Item集合中。