这似乎是一个CS101问题,但我已经设法彻底迷惑自己。
//this is inside a service class
ObjectToUpdate objectToUpdate = objectrepository.Get(objectToUpdate.Id);
SecondObject secondObject = secondObjectRepository.Get(secondObject.Id);
objectToUpdate.Update(secondObject);
objectRepository.Save(objectToUpdate);
//the object itself
public class ObjectToUpdate {
public int Id { get; set; }
public string Name { get; set; }
public void Update(SecondObject secondObject) {
Name = secondObject.Name
}
}
当我进入“保存”行时,它将使用secondObject中的名称正确更新objectToUpdate,对吗?当你将它传递给Update方法时,它会自带一个引用吗?
答案 0 :(得分:3)
是的,类是通过引用传递的,因此您将传递对同一对象的引用。本教程为理解这一概念提供了很好的参考:http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c-b3f6-40b5-98b5-413b6d348b91&PagePath=/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx
答案 1 :(得分:0)
这对我来说是正确的。当您转到Save()行时,objectToUpdate.Name
将与secondObject.Name
如果逻辑上更容易阅读,您可以更改此行以包含“this。”
this.Name = secondObject.Name
以便您意识到要设置的Name属性是属于'this'的属性,该属性与调用该方法的对象实例相同。代码在功能上是相同的,但可能更容易理解?
答案 2 :(得分:0)
是的,.NET Object的值实际上是存储该对象的内存地址。说firstObject = secondObject
不会影响调用方法中引用的secondObject,但是说firstObject.Name = secondObject.Name
会更改Name
的值。