关于值类型和引用类型已经写了两篇博客,之前大多都是理论阶段,今儿就举个栗子来看看他们两种数据类型在传递参数方面到底有什么不同的地方。今天的开场白还真的挺开门见山的哈~
首先建立一个person的类,有姓名、年龄、样貌三个属性
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Look { get; set; }
}
然后客户端调用:
我们首先实例化person这个类,并赋给他初始值,但是呢我想让他变得年轻一点,变得强壮一点
class Program
{
static void Main(string[] args)
{
//初始化khalil的值,姓名khalil,年龄33,很瘦很瘦
Person khalil = new Person { Name = "khalil", Age = 33 ,Look ="thin" };
//但是我想让我的偶像变得年轻一点,strong一点
int age = khalil.Age;//声明了一个值类型变量,并将大同的年龄减少了3岁
khalil.Age = 30;
Person 方大同 = khalil;//声明了一个引用类型变量
khalil.Look = "strong";//khalil想变得强壮一点
Console.WriteLine("khalil's age:\t{0}", khalil.Age);
Console.WriteLine("age's value:\t{0}", age);
Console.WriteLine("khalil's look:\t{0}", khalil.Look);
Console.WriteLine("datong's look:\t{0}", 方大同.Look );
Console.ReadLine();
}
}
从运行结果我们可以看到我虽然想让方大同变得年轻一点,但是他实际的年龄没有发生改变,但是样貌这个属性确实改变了。这是因为age是int类型属于值类型,而look是string类型是引用类型,当执行
int age = khalil.Age
khalil.Age = 30;
我们在来看看look属性的变化,执行完下边一句,栈中是这个样子的(黑色箭头):
Person 方大同 = khalil;//声明了一个引用类型变量
这行代码的意思是将khalil的引用地址赋给了方大同,所以两个对象指向同一个地址,当执行完下边的代码:
khalil.Look = "strong";//khalil想变得强壮一点
今天这个小例子给以让我们很清晰的看出来值类型和引用类型在传递参数时的区别,虽然对于这部分知识总结了三篇博客,但还得加深理解,随着实践在慢慢摸索吧!~~~