Csharp/C#教程:类型约束分享


类型约束

我有以下类层次结构。

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的类型进行编译时检查以确保它们分别是ItemAItemBIEnumerableIEnumerable ? 有没有更好的设计?

您可以更改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; 

https://msdn.microsoft.com/en-US/library/sz6zd40f(v=vs.100 )

像这样

 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集合中。

上述就是C#学习教程:类型约束分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/943135.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

精彩推荐