问题描述
我正在努力理解按引用传递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 (将#修改为@)