带你了解c#泛型类的功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
在泛型类中,由于不知道泛型参数T是什么类型,可能是引用类型,也可能是值类型,因此不能将空等赋予泛型类型。如何对泛型对象赋初值,如何保证泛型的正确性等,以使用泛型文档管理器为例:
文档管理器用于从队列中读写文档。首先创建一个泛型管理器AddDocument()方法添加一个文档到队列中,IsDocumentAvailabe只读属性指示队列中是否还有文档。
公共类DocumentManager{ 私人只读的Queue documentQueue=new Queue (); 公共空间AddDocument (T医生) { 锁(这) { documentQueue.Enqueue (doc); } } 公共bool IsDocumentAvailable { {documentQueue返回。数比;0;} } }
<强> 1,默认值强>
给DocumentManager
IDocument公共接口 { 字符串标题{得到;设置;} 字符串内容{得到;设置;} } 公共类文档:IDocument { 公共文档() { } 公共文档(标题字符串,字符串的内容) { 这一点。标题=标题; 这一点。内容=内容; } 公共字符串标题{得到;设置;} 公共字符串内容{得到;设置;} }
给泛型文档管理器DocumentManager
公共类DocumentManagerTDocument: IDocument {//? }
对于实现了约束的泛型文档管理器,可以处理任何实现了IDocument接口的类。其DisplayAllDocuments()方法改写为:
静态void Main () { var dm=new DocumentManager(); dm.AddDocument(新文档(“标题A",“样本A")); dm.AddDocument(新文档(“标题B",“样本B")); dm.DisplayAllDocuments (); 如果(dm.IsDocumentAvailable) { 文档d=dm.GetDocument (); Console.WriteLine (d.Content); } }
泛型类型支持的几种约束:结构(结构约束,类型T必须是值类型),类(类约束,类型T必须是引用类型),IFoo(类型T必须实现接口IFoo),新()(构造函数约束,类型T必须有一个无参构造函数),另一个的(类型T派生自另一个的,也称“裸类型约束”)。
泛型约束中:
- <李>只能为无参构造函数定义构造约束,不能为有任何参数的构造函数定义构造函数约束。