out,ref,params修饰符的使用和区别

========================out,ref修饰符的作用========================

我们先来看一个例子,这样会更有助于我们了解这两个修饰符的意义

A.
protected void Page_Load(object sender, EventArgs e)
{
        string a = "";
        getStr(a);

        Response.Write("^^^^" + a + "^^^^");
}

public void getStr(string a)
{
        a = "abcd";
}

以上这段程序的输出结果是 ^^^^^^^^

B.
protected void Page_Load(object sender, EventArgs e)
{
        string a = "";
        getStr(ref a);

        Response.Write("^^^^" + a + "^^^^");
}

public void getStr(ref string a)
{
        a = "abcd";
}

以上这段程序的输出结果是 ^^^abcd^^^

C.
protected void Page_Load(object sender, EventArgs e)
{
        string a = "";
        getStr(out a);

        Response.Write("^^^^" + a + "^^^^");
}

public void getStr(out string a)
{
        a = "abcd";
}

以上这段程序的输出结果同样是 ^^^abcd^^^

朋友们可能要问,B和C 两段程序的输出结果是一样的阿,对,是一样的,他们两个修饰符的区别就在于调用前的变量
使用out 修饰符,变量可以不初始化,而使用 ref 修饰符,则变量必须初始化,如下

string a;
getStr(ref a);

这样系统就会报错 Use of unassigned local variable 'a'

另外,out 和 ref 还有两个不同之处
(1) ref传进去的参数在函数内部可以直接使用,而out不可
(2) ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值


注:一般方法的参数(如A段代码的getStr方法的参数)是传递变量值的拷贝,而加上out和ref修饰符后就变成对变量内存地址的引用

========================params修饰符的作用========================

params 构造函数声明数组 而不知道数组长度 用的
在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
using System;
public class MyClass
{

 

public static void UseParams(params int[] list)
{
for (int i = 0 ; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}

public static void UseParams2(params object[] list)
{
for (int i = 0 ; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}

static void Main()
{
UseParams(1, 2, 3);
UseParams2(1, 'a', "test");

// An array of objects can also be passed, as long as
// the array type matches the method being called.
int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}

输出
1
2
3

1
a
test

10
11
12

转载于:https://www.cnblogs.com/kinpauln/archive/2010/12/30/1921621.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值