zoukankan      html  css  js  c++  java
  • 泛型理解

    泛型:实质:一次编码,多次使用。类型化参数。(参数的类型 当做不定值)

    好处:

         1、使用泛型可以最大限度地重用代码、保护类型的安全以及提高性能。
      2、泛型最常见的用途是创建集合类,在集合类中,泛型被应用的淋漓尽致。
      3、可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
      4、可以对泛型类进行约束以限制使用这个类的具体版本。
      5、泛型中使用的参数类型可以在运行时通过反射获取相关信息。
      .NET Framework类库在System.Collections.Generic命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如System.Collections命名空间中的ArrayList,这个问题我们将在介绍集合类的时候会向大家详细的介绍。

     类:public class person<T>
    {
        public void shou(T temp) { int a = "手";}
        public void yan() { int b = "眼"; }
    }

    调用:

      person<int> p = new person<int>();
            p.shou(1);
            person<string> s = new person<string>();
            s.shou("a");

    可以看出,泛型类与Object实现的类有很大的区别:
      1.、泛型类比object实现的类更安全。实例化了int类型的堆栈,就不能处理string类型的数据,而且处理了别的类型的数据,在编译的时候就通不过,很安全。
      2、Object实现的类需要进行装箱和拆箱。泛型类可以在实例化时,按照传入的数据类型生成本地代码,这时,本地代码数据类型已确定,这样就无需装箱和拆箱。
      3、泛型不需要进行数据类型转换,节省了CPU的计算时间。

    二泛型约束

    6种约束

    例子:public class C<T> where T : Stack, IComparable{..... }

    T:struct,类型参数必须是值类型。可以指定除Nullable以外的任何值类型。

      public class MyClass<T>  where T : struct{...}
      T:class,类型参数必须是引用类型,包括任何类、接口、委托或数组类型。

      public class  MyClass<T> where T : class{...}
      T:new()    类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new()约束必须最后指定。

      public  MyClass class<T>  where T : new(){...}
      T:<基类名>,类型参数必须是指定的基类或派生自指定的基类。

      public class MyClass<T>  where T : Stack{...}
      T:<接口名称> ,类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

      public class MyClass<T> where T : IComparable{...}
      T:U,为T提供的类型参数必须是为U提供的参数或派生自为U提供的参数。这称为裸类型约束。

      public class MyClass<T>  where T : U{...}

    三 泛型方法

    例子:    public void person<T>(T t)
        {
            string a = "ddd";
        }

    调用:

      Customer c = new Customer();
      c.person<int>(1);

    注意:重要原则:当一般方法与泛型方法具有相同的签名时,会覆盖泛型方法。

    public T add(T a, V b)
      {
         return b;            //返回V类型的数据
      }

    调用:Node<int, int> node = new Node<int, int>();
      int x = node.add(1, 10);//返回数据由调用类型决定。

  • 相关阅读:
    GPU上的基本线性代数
    NVIDIA数据中心深度学习产品性能
    GeforceRTX系列参数对比
    NVIDIA CUDA-X AI
    NVIDIA 认证系统
    汉字手写训练和识别
    动态表单工作量给后端
    机器学习PAL数据可视化
    越是向前 越受阻力
    Caused by: java.lang.IllegalStateException: java.lang.IllegalStateException: Cannot emit more than one data
  • 原文地址:https://www.cnblogs.com/Ilin631/p/2092381.html
Copyright © 2011-2022 走看看