函数参数及返回值
来源:互联网 发布:网络攻击分类排名 编辑:程序博客网 时间:2024/05/16 07:08
方法(函数)在普遍意义下,将有传入参数和传出参数,void型的函数其实也不例外。
一般情况下,函数通过return语句返回参数,如果也返回多组(无论是单个变量还是集合参数)参数,则要借助传入ref参数。下面,对函数的内容进行一般性的总结。
一、使用可选参数
为了使用可选参数,可以在定义方法时为该参数提供默认值,如下:
void optMethod(int first, double second=0.0, string third="Hello");
在上述函数中,first是必选参数,而second和third参数是可选的。默认形参从有到左,也就是所有可选参数必须在必选参数后面。可以像下面一样调用这个函数:
optMethod(99,123.45,"World");
optMethod(99,123.45);
optMethod(99,"World");可以吗?还要求证
二、传递命名参数
C#默认根据参数位置判断实参对应的形参,如上。现在,C#还允许按照名称指定参数,利用这个功能,就可以按照不同的顺序传递实参啦!为了将一个实参作为命名参数来传递,必须输入参数名,一个冒号,然后就是要传递的值。如下:
optMethod(first:99,second:123.45,third:"World");
optMethod(first:99,second:123.45);
利用命名参数,实参可以按任意顺序传递,就像下面这样重写调用optMethod方法的代码:
optMethod(second:123.45,first:99);
也可以指定部分,剩下可选参数用默认值。如下,second使用默认形参
optMethod(first:99,third:"World");
三、消除可选参数和命名参数的歧义
这里,举两个例子就可以啦!
void optMethod(int first, double second=0.0,string third="Hello");
void optMethod(int first, double second=1.0,string third="GoodBye", int fourth=10);
当我们像下面这样调用时:
optMethod(1,2.5,"World");
我们根本不清楚,是调用哪一个函数,事实上,是这样的么?实际上,调用的是和方法最匹配的那个版本,所以,最后选择的是获取3个参数的版本,而不是四个。
四、可变数量形参——参数数组
4.1:声明params数组
params关键字可以作为一个数组参数的修饰符来使用。其作用是可以传递任意数量的参数个数。例如:
public static int Min(params int[] paramList)
{}
1)如果要判断两个整数值哪个大,可以像下面这样调用:int min=Min(first,second);
2)如果要判断三个整数值哪个大,可以像下面这样调用:int min=Min(first,second,third);
如果不定义params参数数组,那么就要写两个形参数量不同的方法,即通过重载来实现,略显麻烦吧!
注意:
1)只能为一维数组使用params关键字
2)不能依赖关键字params来重载一个方法,其不构成方法签名的一部分,如下例,编译时出错(重复定义):
public static int Min(int [] paramsList)
public static int Min(params int[] paramList)
3)不允许为params数组指定ref或out修饰符
4)params数组必须是形参表的最后一个参数,这也说明一个函数的形参当中最多只能有一个params参数
5)非params方法总是优于params方法,也就是说如果愿意,仍可以创建一个方法的重载版本,让其应用更常规的情况,如下:
public static int Min(int leftHandSide,int rightHandSide)
public static int Min(params int[] params)
注意其和2)中“所谓”重载的区别。
6)编译器会拒绝有歧义的重载。例如,以下两个Min方法就存在歧义,如果传递两个int型参数,将无法分辨具体应该调用哪个,编译时出错:
public static int Min(params int[] params)
public static int Min(int,params int[] params)
4.2:使用params object[]数组参数
4.1中int型的参数数组非常有用,因为它允许在一个方法调用中传递任意数量的int参数。然而,假如参数的数量不固定,参数类型也不固定,又该怎么办?C#也提供了一种技术来解决,即params object[]数组参数,其定义如下:
public static int Min(params object[] paramList)
{}
其有以下特性:
1)可以不向其传递任何实参,在这种情况下,相当于编译器传递了长度为0的object数组
2)可以传递null作为实参,因为数组是引用类型,所以允许null来初始化数组
3)可以向该方法传递一个实际的数组
4)可以向该方法传递不同类型的其他任何参数
五、引用参数——引用参数可以用来返回函数变量。
通常,向方法传递一个参数时,对应的参数(形参)会用实参的一个副本来初始化。不管参数是值类型(如int)、可空类型(如int?)、还是引用类型(如WrappedInt),这一点都成立,换言之,随便在方法内部对形参进行什么修改,都不会影响作为参数来传递的一个变量的原始的值。
4.1:ref
如果一个参数(形参)附加了ref关键字作为前缀,那么该参数就会成为实参的一个别名(或者为实参的一个引用),而不再是实参的一个副本。使用ref参数时,对参数的任何操作,都会同样应用于实参,因为实参和形参引用的是同一个对象。
4.2:out
ref参数在使用前,必须赋值。但是,有的时候,我们希望由方法本身来初始化参数,所以希望向其传递一个未初始化的参数。out关键字正是针对这一需求设计的。
4.3:ref和out的区别
这两者非常相像,同样可以使形参变为实参的一个别名,而不再是副本,其区别在于:
1)out是output的简称,在向方法传递一个out参数之后,必须在其方法内部对其进行赋值,否则代码无法编译。
static void DoInitialize(out int param)
{
//param=42;
}
static void Main()
{
int arg;
DoIntialize(out arg);
Console.WriteLine(arg);//如果在DoInitalize里面没有初始化param,编译错误,否则显示42
}
2)ref参数使用前必须初始化,而out参数则不必。即所谓的ref有进有出,out只出不进。
- 函数参数及返回值
- open函数参数及返回值
- open函数参数及返回值
- open函数参数及返回值
- open函数参数及返回值
- open函数参数及返回值
- C++函数的参数传递、返回值及函数声明
- 基础知识—函数-函数参数及返回值
- 二维数组作函数参数及返回值
- windbg查看函数参数,调用堆栈,及返回值.
- js 函数作为参数及返回值的例子
- js 函数作为参数及返回值的例子
- C语言中的main函数参数及返回值
- 3.2 参数传递、返回值及函数声明
- 二维数组做函数参数 及返回值
- CFileDialog 参数及返回值
- 函数返回或参数返回值
- 函数参数与返回值
- java发送邮件没有主题且乱码解决
- Mysql 远程登录及常用命令
- oracle exp/imp命令详解
- python使用os.walk和os.path.join来遍历文件夹的文件(包括子文件夹下的文件)
- Form嵌入到Panel里(C#)
- 函数参数及返回值
- 不能在条件分支里使用texld/texldb/texldp/dsx/dsy指令
- Eclipse报错"No embedded stylesheet instruction for file"的解决方法
- SVN版本管理配置
- Erlide中文设置
- GIT版本配置管理
- C#中的Main(String[] args)的意思
- 查找高亮
- Oracle边导出边压缩方法