C#中的Ref参数和Out参数

引用参数ref

当一个参数带有ref修饰符时候这个参数就是一个引用参数。引用参数本身并不创建新的存储空间的。

引用参数指向函数子句调用中作为参数给出的相关变量表征的存储空间,所以此参数的值就等于它所指向的变量。修过C的人这个应该很容易明白的。

下面是关于引用参数的赋值规则:

1、在一个变量被传递给函数子句调用中相关引用参数之前,它自身必须被明确赋值;

2、在函数子句界定的范围内,引用参数被认为是初始化过的

 

输出参数out:

带有out修饰符的参数为输出参数。和引用参数一样out参数本身并不创建新的存储空间,输出参数指向函数子句调用中作为参数给出的相关变量表征的存储空间。这样,此输出参数的数值总是等于它所指向的变量。

下面时关于输出参数的赋值规则:

1、在一个变量被传递给函数子句调用中相关输出参数之前,它自身不需要被明确地赋值(这个是和引用参数不同的,要特别注意);

2、在函数子句调用中,每个被传递给输出参数的变量被认为在该执行路径中已被赋值;

3、在函数子句界定的范围内,输出参数被认为是初始化过的

4、在函数子句返回之前,每一个输出参数必须被明确地赋值(这一点也要特别注意)

在结构体类型的构造函数中,关键字this就象是此结构体类型的输出参数

下面看一个列子具体来说说这个引用和输出参数:

 publicstatic void RefAndOutParam(ref int refParam, out int outParam)
        {
           
        }

错误 1  控制离开当前方法之前必须对 out 参数“outParam”赋值D:\_net\conv_logs_process\C_SHARP\Program.cs

2228  C_SHARP

上面就是在方法结束之前未对out参数复制,系统就会提示这种错误;

 class Program
    {
        static void Main(string[] args)
        {
            int refParam = 11;
            int outParam = 22;
           MyClass.RefAndOutParam( refParam, outParam);
            System.Console.WriteLine(refParam);
            System.Console.WriteLine(outParam);
        }
    }

 class MyClass
    {


        public static void RefAndOutParam(ref int refParam,out int outParam)
        {
            outParam = 20;
            refParam = 10;
        }
    }

错误 1  与“C_SHARP_WBB.MyClass.RefAndOutParam(ref int,out int)”最匹配的重载方法具有一些无效参数

D:\_net\conv_logs_process\C_SHARP\Program.cs

1413  C_SHARP
错误 2 参数 1 必须使用关键字“ref”传递

D:\_net\conv_logs_process\C_SHARP\Program.cs

1437  C_SHARP
错误 3 参数 2 必须使用关键字“out”传递

D:\_net\conv_logs_process\C_SHARP\Program.cs

1447  C_SHARP

 

特别注意,引用带有引用参数和输出参数的方法时候,必须加上refout

 

classProgram
    {
        static void Main(string[] args)
        {
            int refParam;
            int outParam = 22;
            MyClass.RefAndOutParam(refrefParam,out outParam);
            System.Console.WriteLine(refParam);
            System.Console.WriteLine(outParam);
        }
    }


    class MyClass
    {
        public static void RefAndOutParam(ref int refParam,out int outParam)
        {
            outParam = 20;
            refParam = 10;
        }
    }

错误 1  使用了未赋值的局部变量“refParam”D:\_net\conv_logs_process\C_SHARP\Program.cs

1440  C_SHARP

上面是对ref参数未被明确赋值;

 

 classProgram
    {
        static void Main(string[] args)
        {
            int refParam = 11;
            int outParam = 22;
            MyClass.RefAndOutParam(refrefParam,out outParam);
            System.Console.WriteLine(refParam);
            System.Console.WriteLine(outParam);
        }
    }


    class MyClass
    {
        public static void RefAndOutParam(ref int refParam,out int outParam)
        {
            outParam = 20;
            refParam = 10;
        }
    }

 

上面这段代码输出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值