2010-12-30 10 views
0

Ich möchte ein Objekt vom anderen mit den Daten aktualisieren, so etwas wie:Benötige ich ein Ref-Schlüsselwort für diese Methode?

User updatingUser = Users.Get(someId); 

updatingUser.Name = otherUser.Name; 
updatingUser.Age = otherUser.Age; 

nun dieses Update ausführen Ich möchte ein Verfahren zu schaffen, brauche ich einen ref in der Parameterliste?

public static void UpdateUserFromUser(User original, User other) 
{ 
    original.Name = other.Name; 
    original.Age = other.Age; 
    .. 
    .. 

} 

Nun ist die ‚Original‘ Benutzer übergeben haben Eigenschaften für das Objekt, die gesetzt werden, und das wird nicht aktualisiert werden, so dass dieses Benutzerobjekt wird einige Eigenschaften aktualisiert.

Ich brauche eine ref richtig, wie:

public static void UpdateUserFromUser(ref User original, User other) 

Oder wird das Objekt 'Original' ohne die Notwendigkeit ref aktualisiert werden?

Antwort

2

Wenn User eine Klasse ist, ist das Schlüsselwort ref nicht erforderlich, da Klassen Referenztypen sind. Dort ist eigentlich ein subtiler Unterschied im Verhalten, wenn Sie ref verwenden, aber in Ihrem Fall ist es nicht notwendig, da Sie die Variable nicht ändern; Sie ändern vielmehr die Eigenschaften des Objekts, auf das es verweist.

+0

was ist der subtile Unterschied? – Blankman

+0

@Blankman: 'ref' in einem Referenztyp ermöglicht es Ihnen zu ändern, auf welches Objekt im Speicher die Variable zeigt. Dies erklärt es kurz und bündig: http://stackoverflow.com/questions/961717/c-what-is-the-use-of-ref-for-reference-type-variables – BoltClock

0

Die ref ist nicht erforderlich (vorausgesetzt, User ist eine Klasse).

3

Das hängt davon ab, ob Benutzer ein struct oder ein class ist. Klassen werden als Referenz übergeben. Wenn Benutzer eine Klasse ist, benötigen Sie das Schlüsselwort ref nicht, um das ursprüngliche Objekt zu aktualisieren. Structs werden nach Wert übergeben, was bedeutet, dass Sie ref verwenden müssen, wenn Sie es aktualisieren möchten.

Verwandte Themen