首页 > 代码库 > C#学习笔记 ----泛型
C#学习笔记 ----泛型
泛型的优点和缺点:
性能
类型安全
二进制代码的重用
代码的扩展
命名约定(字母T作为前缀)
创建泛型类型,如下:
public class LinkedListNode<T>{ public LinkedListNode(T value) { this.Value =http://www.mamicode.com/ value; } public T Value{get;private set;} public LinkedListNode<T> Next{get;internal set;} public LinkedListNode<T> Prev{get;internal set;}}public class LinkedList<T>:IEnumerable<T>{ public LinkedListNode<T> First{get;private set;} public LinkedListNode<T> Last{get;private set;} public 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 IEnumerable.GetEnumerator() { return GetEnumerator(); }}
泛型类的功能
在泛型中,根据泛型类型是引用类型还是值类型,泛型default用于将泛型类型初始化为null或0。
泛型支持几种约束机制:
where T:struct 对于结构约束,类型T必须是值类型
where T:class 类约束指定类型T必须是引用类型
where T:IFoo 指定类型T必须实现接口IFoo
where T:new() 这是一个构造函数约束,指定类型T必须有一个默认构造函数
where T1:T2 这个约束也可以指定,类型T1派生自泛型类型T2。该约束也称为裸类型约束。
使用泛型类型还可以合并多个约束
泛型类的静态成员只能在类的一个实例中共享
泛型接口
泛型结构
Nullable<T>
结构Nullable<T>定义了一个约束:其中的泛型类型T必须是结构
如下:
public struct Nullable<T> where T:struct{ public Nullable(T value) { this.hasValue = http://www.mamicode.com/true; this.value =http://www.mamicode.com/ value; } private bool hasValue; public bool HasValue; { get { return hasValue; } } private T value; public T Value; { get { if(!hasValue) { throw new InvalidOperationException("no value"); } return value; } } public static explicit operator T(Nullable<T> value) { return value.Value; } public static implicit operator Nullable<T>(T value) { return new Nullable<T>(value); } public override string ToString() { if (!HasValue) return String.Empty; return this.value.ToString(); }}
定义可空类型的变量,使用“?”
泛型方法
C#学习笔记 ----泛型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。