c#泛型总结


一、泛型用途
  泛型的用途主要是实现动态类型,数据类型也作为一中参数来处理。通过泛型可以定义类型安全类,而不 会损害类型安全、性能或工作效率。实例化类型推迟到客户端实现时,主要用途就是代码重用。比如一种数据结构或设计模式,在没有泛型支持的时候,必须对每一 种对象类型编写相似的代码才可以实现。如,一个Tree,当Node里为字条串是一个,数字是一个,其他类又是一个,这个一个Tree,就有了多种类的实 现,这是不利于代码的重用和维护的。另一种变通的方法Node中包含数据的地方用object来代替,这样做的问题一是如果Data域为值类型,会造成频 繁的装箱和拆箱操作,影响效率。二是类型安全问题,需要用到强制类型转换,不能对客户端代码进行适当的限制,容易出现未知的错误。
二、泛型语法
泛型用"<>"括起来,括号里面是泛型(一般类型参数)名称,在实例化时,用适当的实参代替。泛型在类上声明,在类的方法或成员声明时引用:
 public class Node<K, T>

 public someMethod(K someParameter)
{
}
... ...

三、泛型可以在不同类进行引用和传递,既一个类定义了泛型,另外一个泛型类也可以引用这个类中的泛型而实现为一个泛型类。泛型类也可以有继承关系。
四、泛型约束:
存在三个类型的约束。派生约束指示编译器一般类型参数派生自诸如接口或特定基类之类的基类型。默认构造函数约束指示编译器一般类型参数公开了默认的公共构 造函数(不带任何参数的公共构造函数)。引用/值类型约束将一般类型参数约束为引用类型或值类型。一般类型可以利用多个约束,您甚至可以在使用一般类型参 数时使 IntelliSense 反射这些约束,例如,建议基类型中的方法或成员。

语法:where
  派生约束:类或接口的名字 不能将 System.DelegateSystem.Array 约束为基类。
 引用 、值约束:值约束:struct 类约束:class
  默认构造函数:new(),默认构造函数要放在其他约束之前
public class Node<K, T> where K:new(),class,IComparable where T:struct
{
}

五、示例

    public class Node<K, T> where K : IComparable
    {
        public K Key;
        public T Item;
        public Node<K,T> NextNode;
        public Node()
        {
            Key = default(K);
            Item = default(T);
            NextNode = null;
        }
        public Node(K key, T item, Node<K,T> nextNode)
        {
            Key = key;
            Item = item;
            NextNode = nextNode;
        }
    }

    public class LinkedList<K, T> where K : class,IComparable,new()
    {
        Node<K,T> m_Head;
        public LinkedList()
        {
            m_Head = new Node<K,T>();
        }
        public void AddHead(K key, T item)
        {
            Node<K,T> newNode = new Node<K,T>(key, item, m_Head.NextNode);
            m_Head.NextNode = newNode;
        }
    }

相关连接:http://msdn.microsoft.com/zh-cn/library/ms379564%28VS.80%29.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值