zoukankan      html  css  js  c++  java
  • 泛型(一)

    泛型并不是一个全新的结构,其他语言中有类似的概念。例如,C++模板就与泛型相似。但是,
    c++模板和.NET泛型之间有一个很大的区别。对于C++模板只在用特定的类型实例化模板时,需要模
    板的源代码。相反,泛型不仅是C#语言的一种结构,而且是CLR定义的。所以,即使泛型类是在唧
    中定义的,也可以在Ⅵsual Basic中用一个特定的类型实例化该泛型。
    创建链表的泛型版本。泛型类的定义与一般类类似,只是要使用泛型类型声明。之后,泛
    型类型就可以在类中用作一个字段成员,或者方法的参数类型。LinkedListNode类用一个泛型类型
    T声明。属性Value的类型是T,而不是object。构造函数也变为可以接受T类型的对象。也可以返
    回和设置泛型类型,所以属性Next和Prev的类型是LinkedListNode<T>。
    public class LinkedListNode(T>
    {
    pub1ic LinkedListNode(T value)
    {
    this.Value = value;
    }
    public T Value {get;private set; }
    pub1ic LinkedListNode(T) Next { get;internal set; )
    public LinkedListNode<T) PreV { get; internal set; )
    }
    下面的代码把LinkedList类也改为泛型类。LinkedList<T>包含LinkedListNode<T>元素。
    LinkedList中的类型T定义了类型T的属性first和last。AddLast()方法现在接受类型T的参数,并
    实例化LinkedListNode<T>的对象。
    除了IEnunmble接口,还有一个泛型版本IEnunmble<T>。IEnumeralbe<T>派生自IEnumerable ,添加了返回IEnunmtor<T>,的GetEnmnmtor()方法,LinkedList<T>实现泛型接口IEnunemble<T>。
    public Class LinkedList<T> : IEnumerable<T>
    {
    pub1iC LinkedListNode<T> First { get; private set;}
    public LinkedListNode<T> Last {get; private set;}
    pub1ic LinkedListNode<T> AddLast(T node)
    {
    var newNode = new LinkedListNode(node);
    if (First == null)
    {
    First = newNode'
    newNode.Prev = Last;
    Last = First;
    }
    else
    {
    LinkListNode previous = Last;
    Last.Next = newNode;
    Last = newNode;
    Last.Prev = previous;
    }
    return newNode;
    public IEnumerator<T> GetEnumerator()
    {
    LinkedListNode(T> Current = First;
    while (current != null )
    {
    yield return current.Value;
    current = current.Next;
    }
    }
    IEnumerator IEnumerab1e.GetEnumerator()
    {
    return GetEnumerator();
    }
    }
    使用泛型类LinkedList<T>,可以用int类型实例化它,且无需装箱操作。如果不使用AddLast()方法传递int,就会出现一个编译错误。
    泛型类的功能
    默认值
    不能把null赋予泛型类型。原因是泛型类型也可以实例化为值类型,而null只能用
    于引用类型。为了解决这个问题,可以使用default关键字。通过default关键字,将null赋予引用类型,将0赋予值类型。
    约束


    继承
    泛型类型可以实现泛型接口,也可以派生自一个类。泛型类可以派生自泛型基类
    public class Base<T>
    {}
    public class Derived<T> : Base<T>
    {}
    其要求是必须重复的泛型类型,或者必须指定基类的类型,如下例所示:
    public class Base<T>
    {}
    pub1ic class Derived<T> : Base<string>
    {}

  • 相关阅读:
    四个好看的CSS样式表格
    POJ 2255 Tree Recovery
    黑马程序猿_2014 7月 我使用多线程体验
    Dos命令将合并两个文本文件的内容
    栈和堆之间的差(他转身无数的文章)
    【Espruino】NO.12 加速度计演示
    MySQL进口.sql文件和常用命令
    typedef和define具体的具体差异
    muduo网络图书馆评测
    Web采矿技术
  • 原文地址:https://www.cnblogs.com/miffylf/p/4006808.html
Copyright © 2011-2022 走看看