首页 > 代码库 > 泛型约束

泛型约束

-----------------------------------IDocument.cs(定义一个接口)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
    public interface IDocument
    {
        string Title { get; set; }//文本标题
        string Content { get; set; }//文本内容
    }
}

-----------------------------------Document.cs(用于实现接口的一个类)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
    public class Document : IDocument//实现了接口IDocument的类
    {
        private string _title;
        private string _content;
        public string Title
        {
            get
            {
                return _title;
            }
            set
            {
                _title = value;
            }
        }
        public string Content
        {
            get
            {
                return _content;
            }
            set
            {
                _content = value;
            }
        }
        public Document(string title,string content)
        {
            this.Title = title;
            this.Content = content;
        }
    }
}

-----------------------------------DocumentManage.cs(泛型类)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication3
{
    public class DocumentManage<TDocuemnt>
        where TDocuemnt : IDocument   //约束:该类必须实现了IDocuemnt的接口
    {
        //实例化一个存放对象的队列
        private readonly Queue<TDocuemnt> documentQuery = new Queue<TDocuemnt>();
        public void AddDocument(TDocuemnt t)//添加对象到documentQuery队列中
        {
            documentQuery.Enqueue(t);
        }
        public bool IsADocumentAvailable { get { return documentQuery.Count > 0; } }//判断documentQuery队列中有没有值
        public void DisplayAllDocuments()//查询所有的对象
        {
            foreach (TDocuemnt  t in documentQuery)
            {
                Console.WriteLine(((IDocument)t).Title);
                Console.ReadKey();
            }
        }
    }
}

-----------------------------------主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            DocumentManage<Document> dm = new DocumentManage<Document>();
            dm.AddDocument(new Document("标题1", "内容1"));
            dm.AddDocument(new Document("标题2", "内容2"));
            if (dm.IsADocumentAvailable)
            {
                dm.DisplayAllDocuments();//输出标题1,标题2
            }
        }
    }
}

============================================================

 

where    T:struct    对于结构的约束,类型必须是值类型

where    T:class    类约束指定的类型必须是引用类型

where    T:IFoo     指定的类型T必须实现接口IFoo

where    T:Foo     指定的类型T必须派生自基类Foo

where    T:new()  指定一个构造函数约束,指定类型T必须有一个默认的构造函数

where    T1:T2    这个约束也可以指定,类型T1派生自泛型类型T2。该约束也称为裸类型约束

 

本文出自 “程序猿的家” 博客,请务必保留此出处http://962410314.blog.51cto.com/7563109/1438149