zoukankan      html  css  js  c++  java
  • C# 泛型的入门理解(来自网络)

    using System.Collections;
    
    class Program
        {
    //做个比较
            static void Main(string[] args)
            {
                //new对象
                Cls a1 = new Cls();
                Cls a2 = new Cls();
    
                //存放对象
                List<Cls> testfanxing = new List<Cls>();
                testfanxing.Add(a1);
    
                ArrayList testarray = new ArrayList();
                testarray.Add(a2);
    
                //取对象
                Cls b1 = testfanxing[0];
                Cls b2 = testarray[0];//这句报错! 改为:Cls b2 = (Cls)testarray[0];就可正常通过,但是用了类型强制转换
    
                //泛型啥好处?
                //1、避免了强制类型转换而造成代码可读性差。
                //2、既然有了类型强制转换,问题来了:类型强制转换可能会用到装箱和拆箱过程,耗时。
                //3、再由于有强制类型转换,在编译的时候可能不会包错,但是运行代码的时候有可能会因为转换失败而出现错误。这就是我们说的非安全代码。搜索
            }
        }
    一般的如果要返回一个集合数组会用到他。他增加了代码的可读性,通过他,前台编码的人就可以不费很大力气了解到这个字段什么意思。比如声明了一个Users实体类
    public Calss Users
    {
       public string Name;
       public int Age;
    }
    这个只是代表一个用户的对象信息,如果你获取的是个用户列表的化,就可以用List<Users> usersList = new List<Users>;然后向列表里添加每个用户信息
    Users users = new Users();
    users.Name = "ssss";users.Age = "12";
    users.add(users);
    这样循环的向列表里添加信息,然后返回这个列表,在前台页面就可以用循环读出这些信息。


      泛型概述 
      使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。
      泛型最常见的用途是创建集合类。
      .NET Framework 类库在 System.Collections.Generic命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList。
      您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
      可以对泛型类进行约束以访问特定数据类型的方法。
      关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。
      优点
      泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic,其中包含几个新的基于泛型的集合类。建议面向.NET Framework 2.0 及更高版本的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类如 ArrayList。
      何时使用泛型集合
      通常情况下,建议您使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员。此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱。
      下面的泛型类型对应于现有的集合类型:
      List<(Of <(T>)>) 是对应于 ArrayList 的泛型类。
      Dictionary<(Of <(TKey, TValue>)>) 是对应于 Hashtable 的泛型类。
      Collection<(Of <(T>)>) 是对应于 CollectionBase的泛型类。Collection<(Of <(T>)>) 可以用作基类,但与 CollectionBase不同的是它不是抽象的。这样使用起来要方便得多。
      ReadOnlyCollection<(Of <(T>)>) 是对应于ReadOnlyCollectionBase 的泛型类。ReadOnlyCollection<(Of <(T>)>) 不是抽象的,它具有一个构造函数,该构造函数使其易于将现有的List<(Of <(T>)>) 公开为只读集合。
      Queue<(Of <(T>)>)、Stack<(Of <(T>)>) 和SortedList<(Of <(TKey, TValue>)>) 泛型类分别对应于与其同名的非泛型类。
       其他类型 
      有几种泛型集合类型没有对应的非泛型类型:
      LinkedList<(Of <(T>)>) 是一个通用链接列表,它提供运算复杂度为 O(1) 的插入和移除操作。
      SortedDictionary<(Of <(TKey, TValue>)>) 是一个排序的字典,其插入和检索操作的运算复杂度为 O(log n),这使得它成为 SortedList<(Of <(TKey, 
    TValue>)>) 的十分有用的替代类型。
      KeyedCollection<(Of <(TKey, TItem>)>) 是介于列表和字典之间的混合类型,它提供了一种存储包含自己键的对象的方法。
      LINQ to Objects 
      LINQ to Objects 功能允许使用 LINQ 查询访问内存中的对象,但条件是该对象类型要实现 IEnumerable 或 IEnumerable<(Of <(T>)>)。LINQ 查询提供了一种通用的数据访问模式;与标准 foreach 循环相比,它通常更加简洁,可读性更高;这种查询可提供筛选、排序和分组功能。LINQ 查询还可提高性能。有关更多信息,请参见 LINQ to Objects。
      其他功能 
      一些泛型类型具有非泛型集合类型中没有的功能。例如,List<(Of <(T>)>) 类(对应于非泛型 ArrayList 类)具有许多接受泛型委托(如允许指定搜索列表的方法的 Predicate<(Of <(T>)>) 委托、表示操作每个列表元素的 Action<(Of <(T>)>) 委托和允许定义类型之间转换的 Converter<(Of <(TInput, TOutput>)>) 委托)的方法。
      List<(Of <(T>)>) 类允许指定您自己的用于排序和搜索列表的 IComparer<(Of <(T>)>) 泛型接口实现。SortedDictionary<(Of <(TKey, TValue>)>) 和 
    SortedList<(Of <(TKey, TValue>)>) 类也具有此功能,此外还允许在创建集合时指定比较器。类似地,Dictionary<(Of <(TKey, TValue>)>) 和 
    KeyedCollection<(Of <(TKey, TItem>)>) 类允许您指定自己的相等比较器。
  • 相关阅读:
    C++ 多线程 (4) 互斥量(mutex)与锁(lock)
    C++ 多线程(3)std::thread 详解
    c++ 多线程(2)创建线程对象的方法
    CMake解决c++11的phread库问题:undefined reference to `pthread_create’
    生成对抗网络--Generative Adversarial Networks (GAN)
    语义分割(semantic segmentation)——U-Net
    目标检测SSD: Single Shot MultiBox Detector
    基于内容的图像检索(CBIR) ——以图搜图
    去噪自动编码器
    利用Chrome开发者工具功能进行网页整页截图的方法
  • 原文地址:https://www.cnblogs.com/jinqier/p/3550373.html
Copyright © 2011-2022 走看看