C#中模型类的工作机制及对象被change函数修改的原因
问题:为什么Person对象会被change函数修改?
我原本认为自己创建了Person类的不同实例对象,但运行代码后发现原对象被修改了,代码示例如下:
public class Program { public static void Main(string[] args) { Person person = new Person(); person.name = "from main function"; Program pro = new Program(); Console.WriteLine(person.name); pro.change(person); Console.WriteLine(person.name); } public void change(Person per) { per.name = "From public void Change function"; } public class Person { public string name {get; set;} } }
这是因为C#中引用类型是按值传递引用的,实际效果等同于操作同一个对象的引用。你在Main方法里只通过new Person()创建了一个Person实例,它属于引用类型。当你把这个实例传给change方法的per参数时,per拿到的是指向同一个内存对象的引用副本,并不是新创建的实例。
所以在change方法里修改per.name,本质上就是修改原person对象的属性——因为它们指向的是内存里同一个对象,从始至终都没有生成新的Person实例。你误以为有多个实例,是混淆了引用和对象本身的区别。
内容的提问来源于stack exchange,提问作者Prakash sekar
相关产品推荐
相关产品推荐

