学习这个之前先看看Console.WriteLine()的方法,通过它学习使用方法的可变参数
可变参数例题
通过Console.WriteLine()方法我们可以发现方法中的占位符就算写到100照样可以对其赋值,难道会有100多个重载方法,用以接收传来100多个0-100之间任意个数变量的值,如果看到方法的定义会发现这个方法的重载参数最多就6个即最后一个,如果超过6个就会定位在如图所示
查看可变参数的方法定义
图中参数的类型都是object,之前说过object是所有数据类型的父类(之后会学习到),这个方法为什么使用object类型作为参数类型,因为这个方法不知道我们会传入什么类型的参数,而所有类型都可以隐式转换为object类型所以才使用object类型,我们定义方法时参数类型也可以使用,不过除非必要最好不要把参数类型设定为object类型(有性能损耗,现在的我们没有必要考虑这点);参数超过6个就会使用用数组作为参数的这个方法重载,只不过这个数组有些特别,在数组类型前面加了个params这个关键字
可变参数:就是数据类型确定,参数个数不定,看下面两个例题
图1
图2
1)加个 params关键字后 方法Sum()的参数列表个数可以一个没有,也可以是一个(方法没有写)或者几个(图中有),因为不知道需要多少个数字进行求和,所以使用可变参数数组进行传参,这样就可以像Console.WriteLine()方法一样,传入的参数不受个数限制;以后学习ADO.Net时经常使用方法的可变参数数组进行传参
2)当方法的参数不止有可变参数数组还有其他的参数时,可变参数数组一定放在最后(没有放在最后编译器就会提示错误)
如图2中调用方法Sum(51, 37, 26, 83, 91, 65, 54, 76)时,就把51传递给了num,其余的才依次传递给可变参数数组,可以使用断点调试进行查看,图1与图2的最后结果不一样(差了一个51)所以在某些时候传入参数时一定要注意参数的顺序
3)一个方法中可变参数数组只能有一个,如果传入的参数个数不定,类型也不定,可以将参数类型设置为object类型,但在使用时需要强制转换为所需类型
object类型可变数组
使用object类型的当可变参数数组类型时更需注意传入参数的顺序不然使用时会可能会出现错误(该例子只是为了演示object)
联系客服