Ich habe folgendes Setup in einer aspx Seite:C# Pass Multithreading in Variable auf ein Verfahren ursprünglichen Werte beibehalten
Object Original = obj;
System.Threading.Thread thread = new System.Threading.Thread(() => saveOriginalDetails(Original));
thread.Start();
Die Grundidee dabei ist, dass ich ein Objekt haben, und ich will es genau sparen wie es ist, bevor Sie Änderungen daran vornehmen.
Also mache ich eine Kopie des ursprünglichen Objekts obj
und speichern Sie es als Original
ich einen neuen Thread bin ab, weil die saveOriginalDetails
Methode wird nach unten zu viel, den Code zu verlangsamen.
Meine Frage ist, wenn ich dies tun statt:
System.Threading.Thread thread = new System.Threading.Thread(() => saveOriginalDetails(obj));
thread.Start();
obj.name = "NewName";
Wo ich jetzt in das ursprüngliche Objekt vorbei bin, und kopieren Sie sie in der Methode, die gleichzeitig, wie diese ausgeführt wird:
private void saveOriginalDetails(object applicant)
{
object OriginalApplicant = applicant;
.....
}
Wird das Objekt an die Methode übergeben in:
saveOriginalDetails(obj));
Haben Sie den Namen Wert zB aktualisiert ein Name von newName
?
Sie kopieren nicht das * Objekt *, Sie kopieren nur seine * Referenz *, Sie haben immer noch nur 1 Objekt im Spiel, aber jetzt haben Sie 2 Referenzen darauf. Wenn Sie das Objekt ändern, ändern Sie nur das eine Objekt. –
@ M.kazemAkhgary: Nein, Objekte werden nicht als Referenz übergeben. Referenzen werden nach Wert übergeben. Es ist wichtig, zwischen diesen zu unterscheiden. Siehe http://pobox.com/~skeet/csharp/parameters.html –
@JonSkeet mein Fehler. Aha. Herr Karlsen sagte es richtig. Danke. @Alex, wenn Sie kopieren möchten, besteht eine Möglichkeit darin, ein neues DuoApplicant zu erstellen, indem Sie 'new DuoApplicant (...);' eingeben und alle Eigenschaften manuell kopieren, wenn möglich oder versuchen Sie es auf diese Weise http://stackoverflow.com/a/16696564/ 4767498 –