黑马程序员技术交流社区
标题:
泛型、委托??
[打印本页]
作者:
LiangLiu
时间:
2013-4-27 20:59
标题:
泛型、委托??
泛型 委托 学习视频看过了,还是不理解,谁能给具体讲解一下,使用场合、使用方法?具体什么作用,最好有代码.
作者:
许庭洲
时间:
2013-4-28 22:30
1.在 AddHead 方法中作为方法参数的类型;
2.在 Node 嵌套类中作为公共方法 GetNext 和 Data 属性的返回类型;
3.在嵌套类中作为私有成员数据的类型;
使用泛型 GenericList<T> 类来创建整数列表。只需更改类型参数,即可方便地修改下面的代码示例,创建字符串或任何其他自定义类型的列表:
class TestGenericList
{
static void Main()
{
// int is the type argument
GenericList<int> list = new GenericList<int>();
for (int x = 0; x < 10; x++)
{
list.AddHead(x);
}
foreach (int i in list)
{
System.Console.Write(i + " ");
}
System.Console.WriteLine("\nDone");
}
}
作者:
cowthan
时间:
2013-4-28 23:22
泛型:你要实现一个类,MyList,作用是存放对象,但是存放什么类型的对象?你设计的时候不知道,只有别人用的时候才知道,所以你使用泛型设计这个类,表示我给你一个类,里面能放很多对象,具体什么类型?我不知道,但是你知道,所以你用具体的类型代替我的泛型就行。
代理:你要设计一个窗口类,上面有一个按钮,按钮被点击的时候能够调用某个action函数,但是action具体执行什么呢,你不知道,但是使用这个类的人知道,所以你用代理来代替action,表示这里我知道这里会执行一个动作,我这就放个代理,具体你要执行什么动作,你自己设置一下这个代理就行。
具体代码由于没有.net运行环境,所以就不写了,看楼上楼下
作者:
崔宏奎
时间:
2013-4-29 00:38
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)后得到的值
}
复制代码
这样,是不是方便了许多,代码可读性也会好一些。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2