陈杰的专栏

ASP.NET C# 电子商务

方法参数ref,out的问题!

对于值型变量作为方法参数时,可以有三种情况:
1.没有ref和out参数  (直接传值,不能改变实参)
2.使用ref参数       (引用传递,输入,可以改变实参)
3.使用out参数       (引用传递,输出,可以改变实参)

4.ref和out的区别在于一个需要初始化,另一个不需要...

例子:

例子(一)

using System;
using System.Collections.Generic;
using System.Text;

namespace TestRef
{
    class Program
    {
        static void TestRef(ref int i){i+=5;}
        static void Test(int i){i+=5;}
        static void Main(string[] args)
        {
            int i1, i2;
            i1 = 10;
            i2 = 10;
            TestRef(ref i1);//
            Test(i2);//
            Console.WriteLine("i1={0}, i2={1}", i1, i2);
            Console.ReadLine();
        }
    }
}
结果:i1=15, i2=10
分析
如果不用ref那么方法Test对实参i2的改变(i2=i2+5)到那里去了?合理的解释是,传的是一个考贝.


例子(二)

为了证明其传的是一个复制本,那么设计一个新测试如下:
using System;
using System.Collections.Generic;
using System.Text;

namespace TestRef
{
    class Program
    {
        static void TestRef(ref int i)
        {
            i += 5;
        }
        static void Test(int i)
        {
            Console.WriteLine("Test中的实参为: {0}", i);
            i += 5;
            Console.WriteLine("Test中的实参为修改后为: {0}", i);
        }
        static void Main(string[] args)
        {
            int i1, i2;
            i1 = 10;
            i2 = 10;
            TestRef(ref i1);//
            Test(i2);//
            Console.WriteLine("i1={0}, i2={1}", i1, i2);
            Console.ReadLine();
        }
    }
}
结果:
Test中的实参为: 10
Test中的实参为修改后为: 15
i1=15, i2=10

这充分说明了,再传递实参(区别于函数定义时称为"形式参数"的称法)时是传递实参的一个复制本这个复制本与实参值相等,但处于内存中不同的位置,换言之如果单独对其中任何一个进行修改,那么这种修改的影响只会对其本身产生影响而与其它任何内在位置的其自身的复制本无关!

 

阅读更多
上一篇MyEclipse中创建Struts出现错误的解决办法
下一篇Struts分页问题之简单解决
想对作者说点什么? 我来说一句

js ref

2007年08月17日 7KB 下载

C_中outref的区别

2012年04月10日 1KB 下载

refout的作用(txt)

2008年09月20日 2KB 下载

outref的区别

2007年08月18日 158B 下载

RefOut参数的例子

2012年09月13日 32KB 下载

refout传值

2014年12月21日 47KB 下载

C#中关键字refout的区别

2011年02月24日 38KB 下载

outref传值的区别

2016年04月12日 215B 下载

C_基础:refout的区别.txt

2012年11月08日 3KB 下载

没有更多推荐了,返回首页

关闭
关闭