猿问

一道简单的代码题目

  1.    首先我定义了一个类:   
  2. sealed  class UserModel   
  3.     {   
  4.         private string _UserName;   
  5.         private int _UserAge;   
  6.   
  7.              public int UserAge   
  8.         {   
  9.             get { return _UserAge; }   
  10.             set { _UserAge = value; }   
  11.         }   
  12.                public string UserName   
  13.         {   
  14.             get { return _UserName; }   
  15.             set { _UserName = value; }   
  16.         }   
  17.                public UserModel(string name, Int32 age)   
  18.         {   
  19.             UserName = name;   
  20.             UserAge = age;   
  21.         }   
  22.               public  void DisplayMember()   
  23.         {   
  24.             Console.WriteLine("UserName:{0},UserAge:{1}",this.UserName,this.UserAge);   
  25.         }   
  26.   
  27.          public static void SendUserDateByValue(UserModel user)   
  28.        {   
  29.            user.UserAge = 34;   
  30.            user = new UserModel("周宇朝", 21);   
  31.        }   
  32.     }   
  33.   
  34. Main函数:   
  35.            UserModel Model = new UserModel("CSDN", 10);   
  36.             UserModel.SendUserDateByValue(Model);   
  37.             Model.DisplayMember();   
  38.             Console.ReadLine(); 

  39.      看代码,在心中模拟,选择正确的输出结果!
  40.     A : UserName:周宇朝,UserAge:34
  41.     B : UserName:CSDN,UserAge:10
  42.     C : UserName: 周宇朝,UserName:21
  43.     D : UserName:CSDN,UserAge:34

 

                                  最好做出详细的解释!!!谢谢

 

慕的地10843
浏览 414回答 3
3回答

慕沐林林

选择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);

holdtom

谢谢写的这么详细,对我们新手帮助很大哈。。。
随时随地看视频慕课网APP
我要回答