zoukankan      html  css  js  c++  java
  • 关于引用类型作为参数加上ref与不加ref的区别

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    using System.IO;
    using System.Net.Sockets;
    using System.Threading;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Test a = new Test();
                a.Message = "初始值";
                Test001(a);
                Console.WriteLine("没有添加ref关键字,也没有对引用参数引用了新的一个Test类型的对象,结果为:{0}", a.Message);
    
                Test b = new Test();
                b.Message = "初始值";
                TestRef(b);
                Console.WriteLine("没有添加ref关键字,并重新对引用参数引用了新的一个Test类型的对象,结果为:{0}", b.Message);
    
                Test c = new Test();
                c.Message = "初始值";
                TestRef(ref c);
                Console.WriteLine("关键字ref关键字,并重新对引用参数引用了新的一个Test类型的对象,结果为:{0}", c.Message);
    
                Console.Read();
            }
    
            static void TestRef(Test t)
            {
                t = new Test();
                t.Message = "对象已赋值";
            }
    
            static void TestRef(ref Test t)
            {
                t = new Test();
                t.Message = "对象已赋值";
            }
    
            static void Test001(Test t)
            {
                t.Message = "对象已赋值";
            }
        }
    
        public class Test
        {
            private string _message;
            public string Message
            {
                get
                {
                    return _message;
                }
                set
                {
                    _message = value;
                }
            }
        }
    }
    View Code

    其实很简单,C#中方法中的参数也是一个变量,这个变量也需要有一个地址。

    对于引用类型的方法参数,传入的对象如果不加Ref,方法参数也就是这个变量也将被创建,不过因为是引用类型,所以地址直接指向所传入对象的地址。所以实际上是有两个变量,但都指向了同一处地址。
    如果加了Ref,那么方法参数这个变量,将不被创建,也就是只有一个变量,指向了一处地址。

    引用类型加不加Ref没有本质区别,只是多个了变量而已。

  • 相关阅读:
    互联网+总决赛有感
    PyQt QListWidget修改列表项item的行高
    virtualenv 安装不同版本的虚拟环境的办法
    OpenDayLight Helium实验三 OpenDaylight二层转发机制实验
    OpenDayLight Helium实验一 OpenDaylight的C/S模式实验
    数据结构上机 经典进出栈问题
    【转载】解决telnet无法连接 Connection refused
    【Python初学者】准备
    OpenDayLight Helium安装
    Mininet实验 测量路径损耗率
  • 原文地址:https://www.cnblogs.com/liuslayer/p/5383179.html
Copyright © 2011-2022 走看看