选择D,
原因是: UserModel Model = new UserModel("CSDN", 10); 这个做了初始化操作,这个时候 UserName ="CSDN" UserAge=10 ,
然后
public static void SendUserDateByValue(UserModel user) {
user.UserAge = 34;
user = new UserModel("周宇朝", 21);
}
在这个方法里面是把 Model 这个变量的值的拷贝传递进来,user.UserAge = 34; 这条语句操作的对象(mA)实际也是Model 变量引用的对象。所以现在 mA.UserAge 的值 为34,mA.UserName的值还是"CSDN", user = new UserModel("周宇朝", 21); 这条语句相当于user变量引用了一个新的对象(mB)的地址。关键是: Model 变量引用的的对象依然是原来的对象(mA),所以调用 Model.DisplayMember(); 相当于输出 mA.UserName,mA.UserAge. 结果是 “CSDN”,“34”;
总结 :参数加上 ref ,out 才是 传递地址、其他的都是传递值。
对象引用变化可以分下面三个阶段:
一、UserModel Model = new UserModel("CSDN", 10);
二、UserModel.SendUserDateByValue(Model);
三、user = new UserModel("周宇朝", 21);
千万别写出这样的代码,如果你真要在函数内 new ,请为你的函数参数指定 out 关键字;user = new UserModel("周宇朝", 21);
很多C++的新手都犯这样的错误,还以为是封装对象的创建,结果搞的系统一堆内存泄露,虽然 .net 中有自动垃圾回收,但是还是请保持好的代码编写规范。
这个东西没啥好解释的,回去看大学课本《C语言程序设计》(谭浩强)中函数的形参和实参的区别。
谢谢写的这么详细,对我们新手帮助很大哈。。。