zoukankan      html  css  js  c++  java
  • ref关键字的作用

    ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

    就是说,在调用方法的参数中使用ref关键字可以使得变量能够改变。

    ref和out都是引用地址
    ref可以理解为引用传值,一个构造器或方法里含有ref参数,任何使用这个构造器或方法的地方操纵的都是同一个变量,ref所修饰的变量,也就是说.和你定义全局变量或者static变量差不多的[效果]。

    以下是一个使用ref和不使用的区别。

    不使用:委托在前面讲了

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        delegate void printFunction( int x);
        class Program
        {
            public void add1( int x)
            { x += 2; }
            public void add2( int x)
            { x += 3; }
            static void Main(string[] args)
            {
                Program pm = new Program();
                printFunction p = pm.add1; //建立委托
                p += pm.add2;
                p += pm.add1;
    
                int x = 5;
    
                p( x); //这里才真正传值,把x传递过去,前面只是给定义,并且通过调用方法改变x的值。
    
                Console.WriteLine("{0}",x);
                Console.ReadLine();
            }
        }
    }

    结果:

    5
    这里没有对x的值发生改变。

    使用ref关键字:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        delegate void printFunction(ref int x);
        class Program
        {
            public void add1(ref int x)
            { x += 2; }
            public void add2(ref int x)
            { x += 3; }
            static void Main(string[] args)
            {
                Program pm = new Program();
                printFunction p = pm.add1;
                p += pm.add2;
                p += pm.add1;
    
                int x = 5;
    
                p(ref x); //这里才真正传值,把x传递过去,前面只是给定义,并且通过调用方法改变x的值。
    
                Console.WriteLine("{0}",x);
                Console.ReadLine();
            }
        }
    }

    结果:

  • 相关阅读:
    CSS浮动(float、clear)通俗讲解
    JAVA 类的加载
    数据库操作 delete和truncate的区别
    正则表达式 匹配相同数字
    Oracle EBS OM 取消订单
    Oracle EBS OM 取消订单行
    Oracle EBS OM 已存在的OM订单增加物料
    Oracle EBS OM 创建订单
    Oracle EBS INV 创建物料搬运单头
    Oracle EBS INV 创建物料搬运单
  • 原文地址:https://www.cnblogs.com/alsf/p/5941514.html
Copyright © 2011-2022 走看看