zoukankan      html  css  js  c++  java
  • 泛型类的功能

    泛型类的功能:默认值、约束、继承、静态成员 。以从队列中读取文档为例

    泛型继承:子类和基类泛型类型一致或指定基类的泛型类型

    泛型的静态成员: 只能类的一个实例中共享

        public class StaticDemo<T>
            {
                public static int x;
            }
            public void test()
            {
                 StaticDemo<string>.x = 4;
                 StaticDemo<int>.x = 5;
                 Console.WriteLine(StaticDemo<string>.x);  //输出4
                 Console.WriteLine(StaticDemo<int>.x); //输出5
            }
    View Code

    文档接口(IDocument)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ListFunction
    {
        public interface IDocument
        {
            /// <summary>
            /// 文章标题
            /// </summary>
            string Title
            {
                get;
                set;
            }
    
            /// <summary>
            /// 文章内容
            /// </summary>
            string Content
            {
                get;
                set;
            }
        }
    }
    View Code

    文档类(Document)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ListFunction
    {
        public class Document:IDocument
        {
            /// <summary>
            /// 文章标题
            /// </summary>
            public string Title
            {
                get;
                set;
            }
    
            /// <summary>
            /// 文章内容
            /// </summary>
            public string Content
            {
                get;
                set;
            }
            public Document()
            {
            }
    
            public Document(string title, string content)
            {
                this.Title = title;
                this.Content = content;
            }
        }
    }
    View Code

    文档管理类(DocumentManager)泛型默认值、约束

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ListFunction
    {
        /// <summary>
        /// TDocument必须实现IDocument接口(泛型约束)
        /// </summary>
        /// <typeparam name="TDocument"></typeparam>
        public class DocumentManager<TDocument>
            where TDocument:IDocument
        {
            private readonly Queue<TDocument> documentQueue = new Queue<TDocument>();
            /// <summary>
            /// 添加一个文档到队列尾
            /// </summary>
            /// <param name="doc"></param>
            public void AddDocument(TDocument doc)
            {
                lock (this) //单线程(个人理解、无依据)
                {
                    documentQueue.Enqueue(doc); //添加到结尾处
                }
            }
    
            /// <summary>
            /// 队列不为空返回true
            /// </summary>
            public bool IsDocumentAvailable
            {
                get { return documentQueue.Count > 0; }
            }
    
            /// <summary>
            /// 获取文档(泛型默认值)
            /// </summary>
            /// <returns></returns>
            public TDocument GetDocument()
            {
                TDocument doc = default(TDocument); //将泛型类型初始化为null或0
                lock (this)
                {
                    doc = documentQueue.Dequeue();  //移除并返回位于 System.Collections.Generic.Queue<T> 开始处的对象。
                }
                return doc;
            }
    
            /// <summary>
            /// 显示所有文档标题
            /// </summary>
            public void DisplayAllDocument()
            {
                foreach (TDocument doc in documentQueue)
                {
                    Console.WriteLine(((IDocument)doc).Title);
                    Console.WriteLine(((IDocument)doc).Content);
                }
            }
    
        }
    }
    View Code

    测试类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ListFunction
    {
        class Program
        {
            static void Main(string[] args)
            {
                var dm = new DocumentManager<Document>();
                dm.AddDocument(new Document("Title A","Sample A"));
                dm.AddDocument(new Document("Title B", "Sample B"));
    
                dm.DisplayAllDocument();
    
                if (dm.IsDocumentAvailable)
                {
                    Document d = dm.GetDocument();
                    Console.WriteLine(d.Content);
                }
            }
        }
    }
    View Code
  • 相关阅读:
    SpringMvc 大概流程分析
    HandlerMethodArgumentResolver 参数解析器
    linux 技巧:使用 screen 管理你的远程会话
    CentOS Linux解决Device eth0 does not seem to be present
    php连接oracle oracle开启扩展
    关于linux一些备份、还原,压缩,归档的命令
    Sphinx学习之sphinx的安装篇
    linux wget 命令用法详解(附实例说明)
    Linux的bg和fg命令
    linux中ctrl+z和ctrl+c的区别
  • 原文地址:https://www.cnblogs.com/zxd543/p/3715677.html
Copyright © 2011-2022 走看看