cs
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。