Ich lese Abschnitt 2.3.2 von Skeets Buch und nach meinem Verständnis gibt es keine echte Referenz in C#, wie es in C++ gibt.Lesen Sie Jon Skeets Kapitel über Referenzen versus Werte. Immer noch verwirrt
Es ist interessant, dass nicht nur zu beachten ist die „by reference“ wenig der Mythos innacurate, aber so ist das Bit „Objekte übergeben werden“. Objekte selbst sind nie übergeben, entweder als Referenz oder nach Wert. Wenn ein Referenztyp beteiligt ist, wird entweder die Variable durch den Verweis übergeben oder der Wert des Arguments (die Referenz) wird als Wert übergeben.
See, das ist etwas anderes als C++ (I aus einem C kommen ++ Hintergrund), weil in C++ Sie das Ampersand direkt ein Objekt in einer Parameterliste verwenden können, verwenden - keine Kopien von etwas, nicht einmal eine Kopie der Speicheradresse des Objekts:
bool isEven (int & i) { return i % 2 == 0 })
int main()
{
int x = 5;
std::cout << isEven(x); // is the exact same as if I had written
// std::cout (x % 2 == 0)
return 0;
}
Es gibt keine Entsprechung der oben genannten. Das Beste, was Sie in C# bekommen kann, ist ein Äquivalent
bool isEven (int * i) { return *i % 2 == 0 })
int main()
{
int x = 5;
std::cout << isEven(&x); // is like
// int * temp = &x;
// return *temp % 2 == 0;
// (garbage collect temp)
return 0;
}
, die im Wert von einer Art Referenz (ein Zeiger) und natürlich vergeht ist in meinem Beispiel sinnlos, weil alles, was in übergeben wird ist eine kleine primitiv (int
).
Von dem, was ich verstehe, gibt es keine C# -Syntax, die ein Element ausdrücklich als eine Referenz, kein Äquivalent der &
in meinem C++ - Beispiel bezeichnet. Der einzige Weg, um zu wissen, ob Sie mit einem Wert oder einer Referenz zu tun haben, ist, sich zu merken, welche Arten von Elementen Referenzen sind, wenn sie kopiert werden und welche Typen Werte sind. Es ist wie JavaScript in dieser Hinsicht.
Bitte kritisieren Sie mein Verständnis dieses Konzepts.
Was mit den 'ref' Parametern falsch ist. Modifikator? Außerdem glaube ich nicht, dass C++ so funktioniert, wie Sie es für die Erklärung des ersten Snippets halten. Was du beschreibst, ist Inlining. – leppie
@leppie Ich denke, ich habe noch nichts darüber gelernt. Hoppla. – user5124106
@LarryPage "Memorizing, welche Arten von Elementen Referenzen sind" in .NET ist einfach, Klassen sind "Referenztypen" und Strukturen sind "Werttypen". Wenn Sie eine Variable übergeben, die eine Instanz einer Klasse ist, übergeben Sie vereinfacht gesagt einen Verweis auf diese Instanz einer Klasse. Wenn Sie eine Variable übergeben, die eine Instanz einer Struktur ist, übergeben Sie eine Kopie dieser Instanz. – jduncanator