1.泛型的使用真的是一大改革,比如我写一个交换两个int型变量的函数,应该这样写:- void swapint(ref int a,ref int b)
- {
- int temp=a;
- a=b;
- b=temp;
- }
复制代码 但仔细想一下,如果哪天我又想交换两个double型变量怎么办,重新写一个swapdouble吗?有了泛型,问题解决了,我只需要这样:- void swap<T> (ref T a, ref T b)
- {
- T temp=a;
- a=b;
- b=temp;
- }
复制代码 现在我想交换两个数的时候,就不需要管它是Int型、Double型还是string、TimeSpan了,编译器会帮我解决这个问题,我只需调用swap<int>(ref x,ref y)、swap<double>(ref a,ref b)、甚至直接写swap(ref a, ref b)都可以了。
2.委托,委托我理解的就是一个函数指针(可以理解为,泛型得表示一类函数,这类函数有相同的参数,返回值),比如我写了四个函数,分别是加、减、乘、除、- int Add(int a,int b){return a+b;}
- int Sub(int a,int b){return a-b;}
- int Mul(int a,int b){return a*b;}
- int Div(int a,int b){return a/b;}
复制代码 你会发现,这四个函数都使用了两个参数,而且返回的都是int类型。
现在假设我又写了一个函数,来完成比较复杂的运算,比如这样- int Calc(int x, int y)
- {
- ........(处理了一些奇怪的东西)
- int n;
- ........(一些奇奇怪怪的运算)
- return n;
- }
复制代码 比如这个函数的作用是获得用户的输入,判断一下进行加减还是乘除运算,最后输出n的值。
这个时候,问题出现了,我不确定到底要调用之前写的加减乘除中的哪个函数,需要在函数中指定,那么就可以用委托。- delegate int Mydel (int a,int b);
- int Calc(int x, int y)
- {
- Mydel del; //把Mydel看作一种类型(实际是一个类)
- ........(处理了一些奇怪的东西)
- int n=5;
- ........(一些奇奇怪怪的运算)
- if (xxx==yyy)
- {
- del=Add; //委托添加一个方法,就用Add函数
- del+=Div; //又加了一个方法
- }
- int sum=del(n,4); //调用这个委托
- return sum; // sum 是经过Add(n,4);再经过Div(n,4)后得到的值
- }
复制代码 这样,是不是方便了许多,代码可读性也会好一些。
|