C#之out,ref关键字
在C#中,我们会见到out,ref关键字,这跟java很不一样,接下来,我们就来了解一番,
1,out关键字
概念:一个带有输出参数的的方法(方法的的参数有被out关键字修饰),有义务在方法退出的时候给这个参数一个恰当的赋值,如果没有,方法编译会报错。
例子:伪代码如下
static void doMethod(int y,out int ans)
{
ans = y*2;//被关键字out修饰的参数ans被赋值
}
static void main(string args[]){
int ans;
doMethod(90,out ans);//调用带输出参数的方法,也必须使用out关键字修饰
}
上面的例子说明,用输出参数返回一个数的一半,看似没有发现out的意义,实际上设计者设计out关键字是有一个很有用的用途的:那就是我们通过out关键字,可以在一个方法中一次就输出多个返回值,如下
static void doMethod(out string name,out int age,out char sex)
{
name = "张三";
age = "30";
sex = '1';
}
2,ref关键字
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
static void Main(string[] args)
{
int x = 1;
int y = 1;
doSome(ref x);
doSome(y);
Console.Write(x+"");
Console.Write(y + "");
}
static void doSome(ref int x)
{
x = 10;
}
static void doSome( int x)
{
x = 10;
}
以上伪代码可看出,ref关键字是对变量的引用进行改变,所以doSome(ref int x)输出10,doSome(int x)输出1,另外可以看出,重载时,ref修饰和不修饰的的签名被认为是不同的,重载可以成功。