• ref与out


     我们知道,将值类型作为方法参数的时候,只是复制了一个而已,并不能改变其原来的值,方法执行完,参数的周期就算完了
    ,就会消失了,如果想改变原来的值怎么办的,就比如把引用类型作为参数一样,可以改变原来的值,那是因为它传递过去的
     是一个引用,一个指向同一个对象的引用,所有对象的值会改变,如果想让值类型在传递的过程中,也可以这样,改变原来的值,那么就就必须把值类型当做引用类型来传递,也就是在方法中加入ref关键字来修饰参数,先来看看下面的例子

     

    View Code
      protected void Page_Load(object sender, EventArgs e)
          {
            int num = 200;
            GetValue(num);
            Label1.Text = num.ToString();
          }
            protected void GetValue(ref int num1)
           {
            num1 = 100;
           }

     如果就是这样的话,上面我们说到只是复制了num作为参数使用,但是原来的num并没有因此而改变,所以在此输入num的值还是以前的的值200,不是100,但是加上ref之后就不一样了

     

    View Code
    protected void Page_Load(object sender, EventArgs e)
        {
        int num = 200;
        GetValue(ref num);
        Label1.Text = num.ToString();
        }
        protected void GetValue(ref int num1)
        {
        num1 = 100;
        }

    这样的值就改变num的值,就是100了,总得来说就是把值类型转换成引用类型作为参数传递了,可以改变原来的值
     还有另外一个修饰符out,这个主要是用来输出的,确切的说ref和out传递的都是地址,但是唯一的区别就是ref重点的将值传入到方法内,而out则注重于输出,不用初始化,看看下面的例子就明白了

     

    View Code
    using System;
        namespace ParameterOutSample3_4
        {
            class AddClass
            {
            public static void Add(int x, int y, out int z)
            {
                z = x + y;
            }
            }
        class MyClass
            {
            public static void Main()
            {
                int a = 13, b = 19, c; //c未初始化
            AddClass.Add(a, b, out c);
                Console.WriteLine("a+b={0}", c);
            }
            }
        }

    有时候使用out和ref可以实现相同的功效,最大的区别就在于out重在输出,不把具体的值传递到方法内,在方法外,不用赋值,而ref就重在输入,需要在方法外初始化!

    简答总结:

        ref与out实现的结果一样,都可以改变原来的值,只是ref需要在方法外赋值,而out不需要在方法外赋值

       另外有个简单的用法

     if (!int.TryParse(Request.Params["id"as stringout this.Id))
                {
               }

    可以直接赋值判断

    多思考,多创新,才是正道!
  • 相关阅读:
    Mysql 创建用户并授权方法
    anyproxy 拦截响应
    Pycharm中加载和使用虚拟环境
    anyproxy 拦截发送请求
    微信小程序测试
    Django admin 后台管理
    Django简介
    Mysql root 密码忘记解决办法
    APP专项测试_启动性能分析
    Windows环境搭建Python虚拟环境
  • 原文地址:https://www.cnblogs.com/shuang121/p/2354392.html
Copyright © 2020-2023  润新知