zoukankan      html  css  js  c++  java
  • 不平庸的泛型

           随着集合的发展。我们使用集合的同一时候也发现集合的一些问题:因为类型的强制转换带来的类型安全问题,代码的复用率低,影响代码执行效率。比方:

                         

           所以为了避免上面的两个问题,.net2.0提出了泛型的概念。

    也就是泛型将类型參数的概念引入了 .net中,使用泛型能够最大限度得重用代码,保护类型的安全以及提高性能。

          所谓泛型。就是通过參数化类型来实如今同一份代码上操作多种数据类型,它利用“參数化类型”将类型抽象化,使实现更为灵活地复用。

          在泛型类或方法的定义中。类型參数是client代码在实例化泛型类型的变量时指定的特定类型的占位符。通常我们使用T作为类型參数占位符,但这并非必须的,我们能够使用一些更有意义的描写叙述性的名称作为类型占位符。如TInput 、TOutput等。

    <span style="font-size:18px;"><span style="font-size:24px;">     public  class  List<TInput,TOutput></span></span>
           

             但有些代码(例如以下)。无法进行编译,为什么?由于我们没有对类型參数T进行类型的设置,这也就是我们通常所说的类型约束。

       

    <span style="font-size:18px;"><span style="font-size:24px;">public class SortHelper<T>  : IComparable{
    
            public void BubbleSort(T[] array)
           {
               int length = array.Length;
    
                for (int i = 0; i <= length - 2; i++)
                {
                   for (int j = length - 1; j >= 1; j--)
                   {
    
                        // 对两个元素进行交换
                      if (array[j] < array[j - 1])
                       {
                           T temp = array[j];
                           array[j] = array[j - 1];
                           array[j - 1] = temp;
                       }
                  }
             }</span></span>
               所以,应用泛型约束的概念对上面的代码进行改善:


             C#泛型要求对“全部泛型类型或泛型方法的类型參数”的不论什么假定。都要基于“显式的约束”。以维护C#所要求的类型安全。

    “显式约束”由where子句表达。而“显示约束”并不是必须。假设没有指定的“显示约束”。泛型參数将仅仅能訪问System.object类型中的公有方法。

            在定义泛型类型时能够对client代码在实例化类时用于类型參数的类型加以限制。约束使用wherekeyword来指定:

    where T: struct 类型參数必须是值类型

    where T: class 类型參数必须是引用类型

    where T: new() 类型參数必须有一个 public 且无參数的构造函数 
    where T: <base classname> 类型參数必须继承至指定的基类(base class)
    where T: <interface name> 类型參数必须是指定的接口或实现了指定接口的


           关于泛型的博客先总结到这里,都是个人理解。欢迎各位拍砖。

      


  • 相关阅读:
    详解softmax函数以及相关求导过程 (转载自知乎)
    每日算法
    每日算法
    每日算法
    每日算法
    每日算法
    广度优先搜索算法
    java实现fp-growth算法
    频繁项集挖掘之Aprior和FPGrowth算法
    频繁项集挖掘之apriori和fp-growth
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5394274.html
Copyright © 2011-2022 走看看