如果类将对象引用作为其值,那么“ new”关键字为什么不覆盖它们?

问题描述

我正在努力理解按引用传递vs pass = by = value的所有含义。

我了解在C#中,除非明确说明,否则您始终按值传递变量。但是,由于非基本类型将引用作为其值保存,因此从技术上讲,您正在传递这些引用。 因此,这就是为什么如果我有一个带有Name属性的Book类的原因。我可以这样

Book book1 = new Book("Fight club");
ChangeBookName(book1,"The Wolfman");

void ChangeBookName(Book book,string name){
    book.Name = name;
}

然后执行Console.WriteLine(book1.name)将输出“ The Wolfman”,因为即使有按值传递,该值也是对象在内存中位置的引用,因此进行更改也会更改原始对象。 / p>

但是,如果我做类似的事情

Book book1 = new Book("Fight club");
    ChangeBookName(book1,"The Wolfman");
    
    void ChangeBookName(Book book,string name){
        book = new Book(name);
    }

然后book1.Name实际上不是“狼人”,而是“战斗俱乐部”。

幕后这是怎么回事? new关键字是否在创建新的对象引用?但是,随后传递的原始值又如何呢?为什么Book的新实例不能覆盖旧实例?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)