• C#引用数据类型特点以及ref的使用


    先贴代码

    namespace ConsoleApplication6
    {
        class Program
        {
            static void Main(string[] args)
            {
                Test1();
                Test2();
                Test3();
            }
            private static void Test1()
            {
                var a = new DataModel() { Value = 1 };
                var b = a;
                a = new DataModel() { Value = 2 };
                Console.WriteLine($"a = {a.Value}");
                Console.WriteLine($"b = {b.Value}");
    
                //Output: a=2 b=1
            }
            private static void Test2()
            {
                var a = new DataModel() { Value = 1 };
                ChangeVal(a);
                Console.WriteLine($"a = {a.Value}");
                //Output: a=1 b=1 c=2
            }
            private static void Test3()
            {
                var a = new DataModel() { Value = 1 };
                ChangeVal(ref a);
                Console.WriteLine($"a = {a.Value}");
                //Output: a=2 b=1 c=2
            }
    
    
            private static void ChangeVal(DataModel c)
            {
                var b = c;
                c = new DataModel() { Value = 2 };
                Console.WriteLine($"b = {b.Value}");
                Console.WriteLine($"c = {c.Value}");
            }
    
            private static void ChangeVal(ref DataModel c)
            {
                var b = c;
                c = new DataModel() { Value = 2 };
                Console.WriteLine($"b = {b.Value}");
                Console.WriteLine($"c = {c.Value}");
            }
        }
    
        public class DataModel
        {
            public int Value { get; set; }
        }
    }

    Test1() b=a之后b指向了同一块内存地址,a重新赋值后a指向了另一块内存地址

    Test2() 函数传递参数,实际地址发生了改变,参数重新实例化后,指向了另一个内存地址

    Test3() 使用ref关键字后传递了一样的地址,所以后面修改c的值就是修改a的值

    作者:qidong
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    数据操作-对数据的增删改查-单表查询和多表查询
    爬虫从入门到放弃
    爬虫从入门到放弃
    创建表的完整语法及表之间的关系
    树链剖分练习总结
    [BZOJ]1984: 月下“毛景树”
    [BZOJ]2243: [SDOI2011]染色
    [BZOJ]4034: [HAOI2015]树上操作
    NOIP2012题解
    CODEVS4633 [Mz]树链剖分练习
  • 原文地址:https://www.cnblogs.com/qidong/p/11155708.html
Copyright © 2020-2023  润新知