Ich versuche, eine Klasse zu entwerfen, die einen Verweis auf ein Objekt (außerhalb der Klasse) bei der Zerstörung aktualisieren kann.Speichern einer Referenz in C#
Also im Wesentlichen erstellen Sie eine Instanz dieses Objekts und übergeben Sie einen Referenztyp (in welcher Weise, Konstruktor usw.) und dann auf die Zerstörung des Objekts die ursprüngliche Referenz hat sich zu einer Referenz durch das Objekt erstellt.
Wenn ich eine Referenz durch Verweis (sagen wir in Konstruktion) übergebe, kann ich keine Möglichkeit finden, diese Referenz (als Referenz) für den Destruktor zu speichern, um sie zu aktualisieren? Zum Beispiel (pseudo):
class Updater
{
object privateReference;
public Updater(ref object externalReference)
{
privateReference = externalReference; //is privateReference now a new reference to the original object?
}
~Updater()
{
privateReference = new object(); //therefore this isn't 'repointing' the externalReference
}
}
Der Schlüssel hier ist, ich bin nicht das Original ‚externe‘ Objekt von dieser Klasse ich versuche zu mutieren versuchen ‚repoint‘ es oder es initialisieren, wenn Sie werden .
Wenn Sie Ihr Objekt zerstören, warum "repoint" ein internes Feld, das auch zerstört wird? – Oded
Ich versuche nicht, das interne Feld zu repozieren, das ist der Punkt. Ich versuche das Ding, auf das es hinweist, neu zu definieren ... wenn das Sinn macht. –
Es ist niemals legal, ein Feld (oder irgendeinen anderen Heap-basierten Speicher, wie ein Array-Element) zu erstellen, der einen Verweis auf eine Variable speichert. Der Grund dafür ist, dass der Ref ein Verweis auf eine lokale Variable auf dem Stack sein könnte, deren Lebensdauer kürzer ist als der Speicher, der den Ref hält, wodurch der Ref ungültig wird. Wir können (1) Refs unsicher und spröde machen, wie C++, oder (2) die Speicherung von Refs einschränken und Refs immer sicher aufbewahren, oder (3) niemals Dinge auf dem Stack speichern. Wir haben (2) gewählt. –