不定数量参数的实现

象C和C++这样的语言提供了很多手段用于创建和使用一个接受不定数目参数的函数,最典型的例子就是printf()函数。

int printf(char *format, …); //省略号表示参数数目不定

使用这个函数十分的简单: 

printf("Hello, world\n"); 

printf("The sum of %d and %d is %d\n", a, b, a+b); 


不过, 使用这些语言创建这样的函数必须依赖于一系列预先定义的宏,而且往往并不具有直观性和优雅性。 

通过运用参数数组,C#提供了一种解决这个问题的优雅的解决方案。参数数组是一个一维数组,它作为方法的最后一个参数出现在参数列表中: 
public string Concat(string separator, params string[] strings) 



string result = ""; 

for (int i = 0; i < strings.Length; i++) 


if (i > 0) 

result += separator; 

result += strings[i]; 


return result; 

上面的方法用于将一些字符串连接成一个字符串,这个方法可以以下面两种不同的方式调用: 

1) 使用数组实例作为参数传递给方法: 

string[] names = { "Anders", "Eric", "Scott", "Duncan" }; 

MessageBox.Show(Concat("+", names) + " = great team"); 


2) 使用0个或多个类型相容的参数传递给方法: 

MessageBox.Show(Concat("+", "Anders", "Eric", "Scott", "Duncan") + " = great team"); 

使用第二种方法调用方法时,会先使用这些类型相容的参数(上例中指的是第一个参数后面所有的参数)创建一个数组,然后把这个参数数组作为真正的实参传递给方法。从这一点可以看出:事实上,上面两种方法传递实参的机制完全相同,只是表现手法不同而已。 

得益于.NET统一的类型系统(所有类型都从object继承,因此可以利用多态性原理实现类型的统一处理),定义方法时可以将object[]作为任何类型的代名称定义为参数数组,调用方法时使用具体的类型调用: 
public int SumTheIntegers(params object[] list) 



// sum all the integers included in list 

int sum = 0; 

foreach (object o in list) 

if (o.GetType() == typeof(int)) 

sum += (int) o; 

return sum; 

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值