我需要一个已经设置了几个属性值的小部件。我需要更改小部件的名称。我被选项 3 所吸引,但我很难说出原因。
public void Do(Widget widget) { // 1
widget.Name = "new name";
}
public void Do(ref Widget widget) { // 2
widget.Name = "new name";
}
public Widget Do(Widget widget) { // 3
widget.Name = "new name";
return widget;
}
我想用几个问题来玩《恶魔代言人》并收集答案,以帮助我解释为什么我会被选项 3 所吸引。
选项 1:为什么不直接修改传入的 Widget?您只是“返回”一个对象。为什么不直接使用传入的对象?
选项 2:为什么不返回 void?为什么不直接在签名中传达您将使用指向参数对象本身的实际内存指针?
选项 3:您返回的对象与传入的对象相同,这对您来说不是很奇怪吗?