C# 泛型类优点和泛型类功能源码

首次发布:2019-05-03 10:48
第一:源代码保护。(如果你知道C++模板对泛型的实现机制,就会知道C++在编译的时候根据对泛型的调用,自动“内联”了一个实现,这样泛型的内容就暴露了,而DotNet的实现方式就不同了,泛型类和方法会被编译成IL,在执行的时候由JIT负责将IL变化为指定类型参数的本地代码,从而保护了源代码)
第二:类型安全。(这点是最显而易见的,抛弃了使用ArrayList时各种丑陋的强制类型转换)
第三:更清晰地代码。因为没有了强制类型转换,所以代码自然显得更清晰
第四:更好的性能。因为值类型可以避免装箱和拆箱所带来的损耗(垃圾回收的次数也会减少)
转载请保留原创地址:http://www.luofenming.com/show.aspx?id=ART2019050300001
以下是源码实例
 public class DocumentManger<T> where T : IDocument
 {//where T:IDocument对实例化这个类进行了约束 T没实现IDocument这个接口不能实例化这个类
     //Queue<T> 先进先出的集合
     private readonly Queue<T> _documentQueue = new Queue<T>();
     private readonly object _lockQueue = new object();
     public void AddDocumnet(T doc)
     {
         lock (_lockQueue)
         {
             //在对象尾部添加 T
             _documentQueue.Enqueue(doc);
         }
     }
     public bool IsDocumentAvailable => _documentQueue.Count > 0;

     public T GetDocument()
     {
         //default(T) 如果是值类型默认为0 引用类型为null
         T doc = default(T);
         lock (_lockQueue)
         {
             //称出并返回第一个 对象
             doc = _documentQueue.Dequeue();
         }
         return doc;
     }
     public void DisplayAllDocuments()
     {
         foreach (T doc in _documentQueue)
         {
             Console.WriteLine(doc.Title);
             //如果T没有实现IDocument这个接口 强制转换会出异常
             // Console.WriteLine(((IDocument)doc).Title);
         }
     }
 }
 public interface IDocument
 {
     string Title { get; }
     string Content { get; }
 }