• 值类型和引用类型


    c#类型分为值类型和引用类型

    值类型赋值或者传递时候,都会复制一分数据,所以改变新数据值的时候并不会改变原来数据

    而引用类型的赋值与传递时,C#会复制一份引用地址,因此改变新变量值时候,会影响到原来的变量

    测试如下代码:
     class Program
        {
            static void Main(string[] args)
            {
                Person p = new Person { Name = "Chris", Gender = "Male" };
                Person p1 = p;
            p = null;
                try
                {
                    Console.WriteLine(p1.Name);
                }
                catch(Exception ex)
                {
                    throw ex;
                }
                Console.Read();
            }

            private static void Change(Person p)
            {
                p = null;
                return;
            }
        }

        public class Person:Object
        {
            public Person()
            {}
            public string Name = "";
            public string Gender = "";

            public void getName()
            {
                return;
            }
        }

    最开始我以为会抛出“未将对象引用设置到对象实例”的异常,但是实际上并无异常,且输出“Chris”
    这里将p置为null,只是将p的地址设置为null,而其真实内容依然存在内存中,同时也存在p1对这些数据的引用。
    因此数据不会被释放,p1.Name还是“Chris”

    同样道理 将 p = null; 改成change(p1)传入时,会复制一份p1的地址,假设为p2,进入到change函数体后,将p2置为null,同样
    改变的只是p2的地址,而p1并不为空,如果要使p1为空,则可以在参数中加ref 或者out




    http://msdn.microsoft.com/en-us/library/ms229614.aspx

  • 相关阅读:
    支付清结算之基本概念和入门
    支付清结算之账户和账务处理
    支付系统设计:支付系统的账户模型(一)
    Docker架构和原理
    Docker容器的原理、特征、基本架构、与应用场景
    Docker的用途与原理
    Random函数的安全性问题与SecureRandom
    nginx配置https
    CentOS Docker 安装
    Nginx能做什么
  • 原文地址:https://www.cnblogs.com/coolkiss/p/1797080.html
Copyright © 2020-2023  润新知