C#泛型
Posted zwj-199306231519
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#泛型相关的知识,希望对你有一定的参考价值。
1.泛型与其他类型作对比:
我们现在要求实现一个类
(1)一般声明类
public class Stack
private int[] m_item;
public int Pop() return 0
public void Push(int itme)
public Stack(int i)
this.m_item = new int[i];
以上代码缺点是只能处理一种数据类型(int),换个string类型就不行了。
(2)优秀的程序员想到用一个通用数据类型object来实现这个类
public class Stack
private object[] m_item;
public object Pop() return 0
public void Push(object itme)
public Stack(object i)
this.m_item = new object[i];
这个类写的不错,非常灵活,但是在处理数据时,若数据量大,则会出现不断地装箱和拆箱操作,这将在托管堆上分配和回收大量的变量,则性能损失非常严重。
(3)使用泛型
public class Stack<T>
private T[] m_item;
public T Pop() return 0
public void Push(T itme)
public Stack(T i)
this.m_item = new T[i];
此类就解决了装箱和拆箱频繁带来的性能损失问题。
2.方法对比
以下为int和string类型的比较方法
public class CompareClass
//整数比较
public static int CompareInt(int value1, int value2)
if (value1.CompareTo(value2) > 0)
return value1;
else
return value2;
//字符串比较
public static string CompareInt(string value1, string value2)
if (value1.CompareTo(value2) > 0)
return value1;
else
return value2;
以上代码对于不同类型要不同处理,此时可以写为泛型:
public class CompareClass<T> where T : IComparable
public static T CompareValue(T value1, T value2)
if (value1.CompareTo(value2) > 0)
return value1;
else
return value2;
3.时间消耗对比
(1)不用泛型代码
public static void TestGeneric()
Stopwatch stopwatch = new Stopwatch();
//ArrayList不是泛型
ArrayList array = new ArrayList();
stopwatch.Start();
for (int i = 0; i < 10000000; i++)
array.Add(i);
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed);
(2)用泛型代码
public static void TestGeneric()
Stopwatch stopwatch = new Stopwatch();
//List<int>为泛型
List<int> gelist = new List<int>();
stopwatch.Start();
for (int i = 0; i < 10000000; i++)
gelist.Add(i);
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed);
(1)耗时2秒多,(2)耗时几百毫秒
4.使用泛型的好处:
(1)泛型能够实现代码复用
(2)泛型能够减少装箱拆箱操作,避免性能损失
(3)减少处理器的负担,加快运行速度
以上是关于C#泛型的主要内容,如果未能解决你的问题,请参考以下文章