创建泛型类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Collections;
 6 using System.Threading;
 7 using System.Runtime.InteropServices;
 8 
 9 namespace ConsoleApplication1
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             var dm = new DocumentManage<Document>();
16             dm.AddDocument(new Document("Title A", "Sample A"));
17             dm.AddDocument(new Document("Title B", "Sample B"));
18 
19             dm.DisplayAllDocuments();
20             if (dm.IsDocumentAvailable)
21             {
22                 Document d = dm.GetDocument();
23                 Console.WriteLine(d.Content);
24             }
25             Console.ReadKey();
26         }
27     }
28     public class DocumentManage<TDocument> where TDocument:IDocument//限定TDocument一定要继承于IDocument
29     {
30         /// <summary>
31         /// Queue:队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
32         /// 进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 
33         /// </summary>
34         private readonly Queue<TDocument> documentQueue = new Queue<TDocument>();
35         public void AddDocument(TDocument doc)
36         {
37             //.NET LOCK方法使用:http://blog.sina.com.cn/s/blog_69f048190100xu2l.html
38             lock (this)
39             {
40                 documentQueue.Enqueue(doc);//入列
41             }
42         }
43         public bool IsDocumentAvailable
44         {
45             get
46             {
47                 return documentQueue.Count > 0;
48             }
49         }
50         public TDocument GetDocument()
51         {
52             TDocument doc = default(TDocument);//default:引用类型会返回 null,对于数值类型会返回零
53             lock (this)
54             {
55                 doc = documentQueue.Dequeue();//出列
56             }
57             return doc;
58         }
59         public void DisplayAllDocuments()
60         {
61             foreach (TDocument doc in documentQueue)
62             {
63                 Console.WriteLine(doc.Title);
64             }
65         }
66     }
67     public interface IDocument
68     {
69         string Title { get; set; }
70         string Content { get; set; }
71     }
72     public class Document : IDocument
73     {
74         public Document()
75         { }
76         public Document(string title, string content)
77         {
78             this.Title = title;
79             this.Content = content;
80         }
81 
82         public string Title
83         {
84             get;
85             set;
86         }
87 
88         public string Content
89         {
90             get;
91             set;
92         }
93         
94     }
95 }
posted @ 2012-10-31 15:24  转身就是一辈子  阅读(39)  评论(0)    收藏  举报