01.为什么需要泛型
泛型就是一中模子
没有使用泛型的时候
class Program
{
static void Main(string[] args)
{
WriteLine(Compare.CompareInt(1,2)); //2
WriteLine(Compare.CompareString("B", "C")); //C
ReadKey();
}
}
public class Compare
{
public static int CompareInt(int a, int b)
{
if (a.CompareTo(b) > 0)
{
return a;
}
return b;
}
public static string CompareString(string a, string b)
{
if (a.CompareTo(b) > 0)
{
return a;
}
return b;
}
}
比较的类型不一样,其实现方式是完全一样的,这时候我们就想有没有一种类型是通用的
我们可以把任何类型当做参数传入到这个类型中去实例化为具体类型的比较
public class Compare<T> where T : IComparable
{
public static T CompareGeneric(T t1, T t2)
{
if (t1.CompareTo(t2) > 0)
{
return t1;
}
return t2;
}
}
class Program
{
static void Main(string[] args)
{
WriteLine(Compare<int>.CompareGeneric(1,2)); //2
WriteLine(Compare<string>.CompareGeneric("B", "C")); //C
ReadKey();
}
}
2.泛型可以帮助我们实现代码的重用,还可以提供更好的性能和类型安全
//可空类型:值可以为空
//可空类型:在值类型后面加上 ?,就可以将 null 赋值给值类型
int? b = null;
int? i = 3;
WriteLine(i + ":" + i.GetType());//3 int
int c; //默认值0
int? d; //默认值null
static void Main(string[] args)
{
Stopwatch stopwatch=new Stopwatch();
//非泛型数组
ArrayList arrayList=new ArrayList();
//泛型数组
List<int> genericList=new List<int>();
stopwatch.Start();
for (int i = 0; i < 10000000; i++)
{
genericList.Add(i);
//arrayList.Add(i);
}
stopwatch.Stop();
TimeSpan timeSpan = stopwatch.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds,
timeSpan.Milliseconds / 10);
WriteLine("运行的时间: " + elapsedTime);
ReadKey();
}
泛型的运行时间
非泛型的运行时间
泛型数组中的加入数据的效率远高于非泛型数组