当前位置:编程学习 > C#/ASP.NET >>

请问大家一个关于引用传参的问题,希望得到原理上的解答,代码如下

using System;
using System.Collections.Generic;
using System.Text;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person1 = new Person();
            SetPerson( person1);
         
        }

        private static void SetPerson(Person person, string ss)
        {
            person = new Person();
            person.Id1 = Guid.NewGuid().ToString();
            person.Name1 = "张三";
            person.Age1 = 22;
        }
    }

    public class Person
    {
        string Id = string.Empty;

        public string Id1
        {
            get { return Id; }
            set { Id = value; }
        }
        string Name = string.Empty;

        public string Name1
        {
            get { return Name; }
            set { Name = value; }
        }
        int Age = 0;

        public int Age1
        {
            get { return Age; }
            set { Age = value; }
        }
    }
}
在主函数MAIN中调用SetPerson方法,个person对象传递了过去,在SetPerson中队person重新实例化了一下,这次实例化person发生了什么变化,导致引用传参赋值失败?希望大家能从原理上给我解答。 --------------------编程问答-------------------- new运算符会新生成一个实例,=(赋值运算符)将生成的实例的引用赋给变量person,这时候person的引用就不是传进来的那个了。相当于一个指针原本指向传进来的对象的内存地址,new创建实例会在内存中新开辟一块区域去存储对象,然后将内存的地址赋给指针,此时这个指针指向的就是新的地址,在外部调用看到的就是新的数据。 --------------------编程问答--------------------
private static void SetPerson(Person person, string ss)
  {
      person = new Person();  //将变量 person 指向一个新的Person实例,该实例在 heap 中分配内存
      person.Id1 = Guid.NewGuid().ToString();
      person.Name1 = "张三";
      person.Age1 = 22;
  }
  


下面的地址讲了一些关于内存管理的知识,你可以看看。
http://www.cnblogs.com/jiejie_peng/archive/2011/04/24/2026272.html
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,