You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:57:24