zoukankan      html  css  js  c++  java
  • C# 自定义泛型类,并添加约束

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


    namespace GenericExam
    {
        class Program
        {
            static void Main(string[] args)
            {
                var dm = new DocumentManager<Document>();
                dm.AddDocument(new Document("Title A","Content A"));
                dm.AddDocument(new Document("Title B","Content B"));
                dm.DisplayAllDocument();


                if (dm.IsDocumentAvailable)
                {
                    Document d = dm.GetDocument();
                    Console.WriteLine(d.Title);
                }
                Console.Read();


            }
        }

    }



    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


    namespace GenericExam
    {
        public interface IDocument
        {
            string Title { get; set; }
            string Content { get; set; }
        }


        public class Document:IDocument
        {
            public string Title { get; set; }
            public string Content { get; set; }


            public Document(string title, string content)
            {
                this.Title = title;
                this.Content = content;
            }
        }


        public class DocumentManager<T> where T : IDocument
        {
            public Queue<T> DocumentQueue = new Queue<T>();


            public void AddDocument(T doc)
            {
                lock(this)
                {
                    DocumentQueue.Enqueue(doc);
                }
            }


            public bool IsDocumentAvailable
            {
                get { return DocumentQueue.Count > 0; }
            }


            public T GetDocument()
            {
                T doc = default(T);
                lock (this)            
                {               
                    doc = DocumentQueue.Dequeue();
                }
                return doc;
            }


            public void DisplayAllDocument()
            {
                foreach (T doc in DocumentQueue)
                {
                    Console.WriteLine(((IDocument)doc).Title);
                }
            }
        }
    }

  • 相关阅读:
    Orleans is a framework
    修改emlog后台登录路径的方法(转)
    form表单中的 action=./?> 是什么意思
    10 个迅速提升你 Git 水平的提示(转)
    为什么国外程序员爱用苹果Mac电脑?(转)
    Socket 专题
    Android 时间戳简单转化
    Android 常用时间格式转换代码
    Android AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
    Android AlarmManager类的应用(实现闹钟功能)
  • 原文地址:https://www.cnblogs.com/dxmfans/p/9434796.html
Copyright © 2011-2022 走看看