四:泛型
Posted yuanhaowen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四:泛型相关的知识,希望对你有一定的参考价值。
性能
装箱拆箱
static void Main(string[] args) { var List = new ArrayList(); List.Add(44);//装箱 int i = (int)List[0];//拆箱 foreach(int item in List) { Console.WriteLine(item);//拆箱 } Console.ReadLine(); }
装箱拆箱是很平常的操作,但是问题是性能损失很大。
泛型的示例
static void Main(string[] args) { List<int> List = new List<int>(); List.Add(44);//没有装箱 int i = (int)List[0];//没有拆箱 foreach(int item in List) { Console.WriteLine(item);//没有拆箱 } Console.ReadLine(); }
使用泛型就没有装修和拆箱的性能损失。原因是代码编译后就已经指定List的类型是int,也就是值类型,不会再转换成Object类型。
类型安全
ArrayList添加的类型其实是Object。也就是说如果有类型的转换可能会有问题。
但是List<T>的定义就只能添加整型类型。
命名约定
一般泛型的名称以T作为前缀,如果有多个泛型类型,可以在T字面后面添加描述性名称
泛型类示例
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyGeneric { class Program { static void Main(string[] args) { MyuLinkList<int> myList = new MyuLinkList<int>(); myList.AddList(1); myList.AddList(11); myList.AddList(111); foreach(var item in myList) { Console.WriteLine(item); } Console.ReadLine(); } } class MyuLinkListNode<T> { public MyuLinkListNode(T value) { this.Value = value; } public T Value { get; private set; } public MyuLinkListNode<T> Next { get; internal set; } public MyuLinkListNode<T> Prev { get; internal set; } } class MyuLinkList<T>:IEnumerable<T> { public MyuLinkListNode<T> First { get; internal set; } public MyuLinkListNode<T> Last { get; internal set; } public MyuLinkListNode<T> AddList(T node) { var newNode = new MyuLinkListNode<T>(node); if(First==null) { First = newNode; Last = First; } else { MyuLinkListNode<T> previous = Last; Last.Next = newNode; Last = newNode; Last.Prev = previous; } return newNode; } public IEnumerator<T> GetEnumerator() { MyuLinkListNode<T> current = First; while(current!=null) { yield return current.Value; current = current.Next; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }
一般来说,不用自己新建泛型类,只要使用.NET自带的泛型类就可以了。比如List<T>。
泛型的功能
泛型不能把null赋值给泛型类型。
默认值
如果一个
以上是关于四:泛型的主要内容,如果未能解决你的问题,请参考以下文章