In realtà io preferisco il secondo stile come il metodo è un mutatore, quindi, un nuovo valore non dovrebbe essere restituito, invece il valore effettivo dovrebbe essere modificato. Tuttavia potrebbe essere necessario indicare che ModifyIt accetta una variabile ref solo per indicare che la c effettiva sarà modificata. c qui viene passato per valore, anche se è un tipo di riferimento, c'è ancora una differenza tra il passaggio dei tipi di riferimento per valore e il passaggio dei tipi di riferimento mediante ref. Vedere la seguente:
public void ModifyIt(Myclass c) { c = new MyClass(); }
nel caso precedente la variabile c viene passato per valore (ossia una copia dal riferimento sarà passata e modificata per puntare a un oggetto appena instanitiated, che a sua volta significa che avrà due oggetti di tipo MyClass in questo caso Ecco un esempio per illustrare:.
Myclass s = new MyClass() { prop = "value" }; ModifyIt(s); Console.WriteLine(s.prob); // this will print "value"
se MOdifyIT instanitaited il referenct a un nuovo oggetto che deve significare che prob viene inizializzata a zero, in realtà didn' t istanziato s, ha istanziato una copia di s, a differenza del ca se se s è stato superato da ref.
Spero che questo aiuti!
Perché stai passando la "Classe x" come parametro a ModifyIt()? Il tuo metodo non prenderà semplicemente l'istanza di Class come 'this'? Dato il codice che hai tutte le altre risposte riguardanti il concatenamento non funzionerà davvero. Per me la domanda sarebbe se la tua classe fosse più di un tipo di valore, nel qual caso non dovresti modificare le tue istanze, ma piuttosto restituirne una nuova con il risultato dell'operazione. – van