注册 登录
编程论坛 C# 论坛

按值传递引用类型 中间那句为什么赋值不对呢?

hellation 发布于 2015-04-28 20:27, 667 次点击
namespace 如何实现按值传递引用类型
{
    class Program
    {
        static void Main(string[] args)
        {
            //按值传递引用类型
            Console.WriteLine("输入用户年龄信息:");
            MyInfo ferd = new MyInfo("亭子", 22);
            Console.WriteLine("未按值传递引用类型前:");
            ferd.PrintInfo();
            SendAPersonByValue(ferd);
            Console.WriteLine("按值传递引用类型后:");
            ferd.PrintInfo();
            Console.ReadKey();
        }
        public static void SendAPersonByValue(MyInfo info)
        {
                //info.MyAge = 23;
                info = new MyInfo("小名",23);          //重新赋值
        }
    }

    class MyInfo
    {
        public string MyName;
        public int MyAge;
        public MyInfo(string name, int age)     //构造函数!(1.与类同名 2.没有返回值)
        {
            MyName = name;
            MyAge = age;
        }
        public MyInfo() { }
        public void PrintInfo()                //一般函数
        {
            Console.WriteLine("{0}年龄是{1}岁", MyName, MyAge);
        }
    }
}
4 回复
#2
hellation2015-04-28 20:59
就是重新赋值的那句!
#3
over12302015-04-29 15:26
我的理解,不知道对不,
SendAPersonByValue(ferd);是把ferd的存储空间位置传递给了 info,而
info = new MyInfo("小名",23);          //重新赋值
这里又重新new 了一个,就创建了一个新的存储空间,info就指向了新创建的存储空间,而ferd还是指向他原来的存储空间,所以ferd的值 并没有变。
如果 不new ,用//info.MyAge = 23; 这句,就是改变的ferd所指向的存储空间的值 。
#4
Maick2015-05-04 10:14
为什么不对.提示什么?提示什么?
#5
Maick2015-05-04 10:17
最后结果不是 小名,23 吗
1