using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 值传递和引用传递
{internal class Program{static void Main(string[] args){person P1=new person();P1.name = "张三";person P2 = P1;P2.name = "李四";Console.WriteLine(P1.name);Console.WriteLine(P2.name);//拆装箱int n = 10;object o = n;int nn = (int)o;//拿什么装的拿什么拆// double oo = (double)o;double oo = (double)nn;Console.WriteLine(nn);Console.WriteLine(oo);Console.ReadKey();}public class person {public string name{get;set;}}}
}
代码分析1
- 创建对象:
person P1 = new person(); 创建一个新的 person 对象,并将 P1 设置为引用该对象。
- 设置属性:
P1.name = "张三"; 设置 P1 引用的对象的 name 属性为 "张三"。
- 引用赋值:
person P2 = P1; 将 P2 设置为引用与 P1 相同的对象。此时,P1 和 P2 都指向同一个对象。
- 修改属性:
P2.name = "李四"; 修改 P2 引用的对象的 name 属性为 "李四"。由于 P1 和 P2 引用的是同一个对象,因此 P1.name 也会变为 "李四"。
- 输出结果:
Console.WriteLine(P1.name); 和 Console.WriteLine(P2.name); 都会输出 "李四",因为它们引用的是同一个对象。
代码分析2
- 变量
n 的定义: int n = 10; 定义一个整数变量 n,并初始化为 10。
- 装箱操作:
object o = n; 将整数 n 装箱到 object 类型的变量 o 中。装箱是将值类型转换为引用类型的过程。
- 拆箱操作:
int nn = (int)o; 将 object 类型的变量 o 拆箱为 int 类型的变量 nn。拆箱是将引用类型转换回原始值类型的过程。
- 类型转换:
double oo = (double)nn; 将 int 类型的变量 nn 转换为 double 类型的变量 oo。由于 int 可以隐式转换为 double,因此显式转换是安全的。
- 输出结果:
Console.WriteLine(nn); 输出 nn 的值,即 10。Console.WriteLine(oo); 输出 oo 的值,即 10.0。