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
  • 相关阅读:
    【读书笔记】:MIT线性代数(1):Linear Combinations
    Adam Optimization Algorithm
    CSS 对齐方式
    CSS Position
    设置Table边框的CSS
    p_CreateAuditEntry
    Entity FramWork Code first 使用心得
    CRM 配置 ADFS后,使用自定义STS遇到的问题总结
    Sql Server Always On主库与附库遇到的问题
    ADFS 登录页面自定义
  • 原文地址:https://www.cnblogs.com/zxd543/p/3715677.html
Copyright © 2011-2022 走看看