Ho bisogno di prendere un Widget che ha già diversi valori di proprietà impostati. Devo cambiare il nome del Widget. Sono attratto dall'opzione 3, ma mi viene difficile articolare il perché.Come meglio modificare e restituire un argomento C#?
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;
}
Mi piacerebbe giocare avvocato del diavolo, con un paio di domande e raccogliere le risposte, per aiutarmi a spiegare perché mi attira Opzione 3.
Opzione 1: Perché non solo modificare il Widget che è passato? Stai solo "restituendo" un oggetto. Perché non usare solo l'oggetto che è passato?
Opzione 2: Perché non ritorno vuoto? Perché non comunicare semplicemente nella firma che utilizzerai il puntatore di memoria effettivo sull'oggetto parametro stesso?
Opzione 3: Non è strano per te che stai restituendo lo stesso oggetto in cui stai passando?
È difficile avere una buona opinione senza più contesto. – Cymen
@Lance: la formulazione di domande, esempi e commenti su ciascuna opzione suggerisce una confusione sul comportamento dei tipi di riferimento in .NET. Per esempio, l'uso di 'ref' nella seconda opzione è del tutto superfluo. – LBushkin
@LBushkin Concordato. La mia comprensione è che l'Opzione 2 sarebbe molto più interessante se mi assegnassi a 'widget', non a una delle sue proprietà, ma penso che l'Opzione 2, come viene mostrato, rifletta la confusione che molti sviluppatori (a volte forse includo me stesso) avere l'uso corretto della parola chiave ref. – lance