Мне нужно взять виджет, для которого уже установлено несколько значений свойств. Мне нужно изменить имя виджета. Меня тянет к Варианту 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;
}
Я хотел бы сыграть в Devil's Advocate, задав несколько вопросов и собрав ответы, чтобы помочь мне объяснить, почему меня тянет к Варианту 3.
Вариант 1: Почему нет просто измените переданный виджет? Вы «возвращаете» только один объект. Почему бы просто не использовать переданный объект?
Вариант 2: Почему не возвращает void? Почему бы и нет просто сообщите в подписи, что вы будете использовать фактический указатель памяти на сам объект параметра?
Вариант 3: Разве вам не странно, что вы возвращаете тот же объект, который передаете ?