C#的值参数 输出参数 引用参数

1.值参数


使用值参数, 数据通过复制实参的值到形参的方式传递到方法. 方法被调用时, 系统做如下操作:


· 在栈中为形参分配空间

· 复制实参到形参


例:

    

class MyClass
    {
        public int Val = 20;                    //初始化字段为20
    }
    class Program
    {


        static void MyMethod(MyClass f1, int f2)
        {
            f1.Val = f1.v + 5;                  //参数的字段加5
            f2 = f2 + 5;                        //另一参数加5
        }


        static void Main(string[] args)
        {
            MyClass A1 = new MyClass();
            int A2 = 10;


            MyMethod(A1, A2);                   //调用方法
        }
    }



执行后A1.Val的值为25, A2的值为10.


2. 引用参数


· 使用引用参数时, 必须在方法的声明和调用中都使用ref修饰符

· 实参必须是变量, 在用作实参前必须被赋值. 如果是引用类型变量, 可以赋值为一个引用或null值


请记住, 对于值参数, 系统在栈里为形参分配内存. 相应的, 引用参数有以下特征:


·  不在栈里为形参分配新的内存

· 形参的名称相当于实参变量的别名, 引用与实参相同的内存位置


例:

   

 class MyClass
    {
        public int Val = 20;                    //初始化字段为20
    }
    class Program
    {


        static void MyMethod(ref MyClass f1, ref int f2)
        {
            f1.Val = f1.v + 5;                  //参数的字段加5
            f2 = f2 + 5;                        //另一参数加5
        }


        static void Main(string[] args)
        {
            MyClass A1 = new MyClass();
            int A2 = 10;


            MyMethod(ref A1, ref A2);                   //调用方法
        }
    }


执行后A1.Val的值为25, A2的值为15.


3. 输出参数


输出参数用于从方法体内把数据传出到调用代码, 它们非常类似引用参数. 如同引用参数, 输出参数有以下要求:


· 必须在声明的调用中都使用修饰符. 输出参数的修饰符是out而不是ref

· 实参必须是变量, 不能是其他表达式类型


就像引用参数, 输出参数的形参担当实参的别名, 形参和实参都是同一内存位置的名称. 但与引用参数不同的是:


· 在方法内部, 输出参数在被读取前必须被赋值. 这意味着参数的初始值是无关的, 而且没有必要在方法调用之前为实参赋值

· 每个输出参数在方法返回之前必须被赋值


因为方法内的代码在读出输出变量前必须对其写入, 所以不可能使用输出参数把数据传入方法.


例:

   

 class MyClass
    {
        public int Val = 20;                    //初始化字段为20
    }
    class Program
    {


        static void MyMethod(out MyClass f1, out int f2)
        {
            f1 = new MyClass();
            f1.Val = 25;                 //参数的字段加5
            f2 = 15;                        //另一参数加5
        }


        static void Main(string[] args)
        {
            MyClass A1 = null;
            int A2 ;


            MyMethod(out A1, out A2);                   //调用方法
        }
    } 

执行后A1.Val的值为25, A2的值为15.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值