Von C Programmiersprache, soweit ich mich erinnere, wenn ein Zeiger auf einen anderen Zeiger zugewiesen ist, würden wir verwenden ** Präfix für den Zugriff auf den ursprünglichen Wert.Verarbeitet der C# -Compiler Referenzen von Referenzen während der Kompilierung?
Wie funktioniert das, wenn ich eine Objektinstanz an eine Methode wie ref Myobject myObject
Argument übergeben. Setzt C# die Heap-Adresse des Objekts auf und ruft printSomething
in folgendem Code auf?
Wenn also eine rekursive Funktion wäre, würde der Compiler den Referenzadressen folgen, bis er das Objekt findet?
Ich füge ein Testszenario hinzu;
public class Test
{
public Test()
{
StringBuilder str = new StringBuilder();
Function(ref str);
Console.WriteLine(str.ToString());
}
int referenceCount = 0;
int Function(ref StringBuilder sBuilder)
{
referenceCount++;
if (referenceCount == 100)
{
sBuilder.Append("foo");
return referenceCount;
}
Function(ref sBuilder);
return referenceCount;
}
public static void Main(string[] args)
{
new Test();
Console.ReadLine();
}
}
Wenn ich entfernen, wenn Block als Stapel über Fluss Ausnahme erwartet gibt so für jedes Verfahren eine neue Referenz in stack.After reserviert nennen Verknüpfung 100 von ihnen miteinander ich eine Methode auf dem letzten nenne. Wird sBuilder.Append("foo");
Code den verknüpften Referenzen folgen, bis es das Objekt erreicht?
Der Zeiger ist die Startadresse eines Objekts. Die Struktur des Objekts muss in C# und c identisch definiert sein. Da C# verwaltet wird, muss das Objekt mithilfe einer Marshal-Technik in nicht verwalteten Speicher verschoben werden. Die Verwendung von zwei Sternchen kann bedeuten, dass der Zeiger eine Adresse für eine Adresse einer Adresse in einem Array ist. Die Kompilierung macht nichts, Sie müssen alle richtigen Definitionen machen. Die Kompilierung legt nur die Startadresse des Objekts auf den Stapel. – jdweng
Da Sie 'myObject' in Ihrem Beispiel nicht neu zuweisen, ist das' ref'-Schlüsselwort völlig nutzlos. Natürlich wird 'printSomething' für die bereitgestellte Instanz aufgerufen. Ich kann keinen anderen sehen. Ich verstehe nicht, was du fragst. – HimBromBeere
Ich fügte ein Testszenario hinzu, um die Dinge etwas zu verdeutlichen. Ich hoffe ich habe mich klarer gemacht. – trueLife