范型方法

关于范型介绍的最后一部分是范型方法。

有时候我们并不是整个类都需要参数类型,而只是一个特定的方法需要。

比如我们有这样一样方法:

ExpandedBlockStart.gif ContractedBlock.gif void  PushMultiple(Stack < int >  stack,  params   int [] values)  dot.gif {
InBlock.gif    
foreach (int value in values) stack.Push(value);
ExpandedBlockEnd.gif}

None.gif

容易知道,这个方法的作用就是把多个int值放入一个堆栈里,但是目前我们只能放入int值,就像这样:

None.gif Stack < int >  stack  =   new  Stack < int > ();
None.gifPushMultiple(stack, 
1 2 3 4 );
None.gif

当然现在我们只能放入整型,根据前面对范型的介绍,我们容易想到把Stack<int>写成Stack<T>就可以接受参数类型了,所以我们就把方法改为范型方法:

ExpandedBlockStart.gif ContractedBlock.gif void  PushMultiple < T > (Stack < T >  stack,  params  T[] values)  dot.gif {
InBlock.gif    
foreach (T value in values) stack.Push(value);
ExpandedBlockEnd.gif}

None.gif
None.gif

如果我们想用这个范型方法达成前面的方法的效果,就这样用:

None.gif Stack < int >  stack  =   new  Stack < int > ();
None.gifPushMultiple
< int > (stack,  1 2 3 4 );
None.gif

当然,现在我们已经不局限于放入int值到堆栈里了,你可以指定自己需要的类型,可重用性就更高了。

其实我们的编译器还可以更聪明一点,它使用了一种叫type inferencing的操作,根据我们提供的方法的参数的类型来推演出方法的参数类型,也就是说,我们上面的例子可以写成这样:

None.gif Stack < int >  stack  =   new  Stack < int > ();
None.gifPushMultiple(stack, 
1 2 3 4 );
None.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值