Pass Instanz der Klasse ohne Verweis
Habe ich diese Frage über einige Instanzen von ref ist oder nicht: hier ist mein problem:
Fall 1: einfache var wie int
:
private void button2_Click(object sender, EventArgs e)
{
int nTest = 10;
testInt(nTest);
MessageBox.Show(nTest.ToString());
//this message show me 10
testIntRef(ref nTest);
MessageBox.Show(nTest.ToString());
//this message show me 11
}
private void testInt(int nn)
{
nn++;
}
private void testIntRef(ref int nn)
{
nn++;
}
dies ist genau das, was ich denke, wenn ich den ref, der parameter wird per Referenz übergeben, so dass, wenn geändert wird, wenn ich verlassen der Funktion der Wert geändert wird...
Fall 2: class:
//simple class to understand the reference..
public class cTest
{
int nTest;
public cTest()
{
setTest(0);
}
public void setTest(int n)
{
nTest = n;
}
public int getTest()
{
return nTest;
}
}
//my main code
private void button3_Click(object sender, EventArgs e)
{
cTest tt = new cTest();
tt.setTest(2);
testClass(tt);
//I expect that the message shows me 2, 'cause testClass
//doesn't have (ref cTest test)
MessageBox.Show(tt.getTest().ToString());
}
private void testClass(cTest test)
{
test.setTest(55);
}
und, wie geschrieben, in den Kommentar, auf den code, ich habe nicht an meinen cTest als Referenz, aber das Ergebnis ist das gleiche, die Meldung zeigt mir 55 und nicht 2..
Wie kann ich das übergeben einer Klasse ohne Verweis?
"Wie kann ich das übergeben einer Klasse ohne Verweis?", das ist wirklich sehr schwer denke ich...
Wenn
Möchten Sie vielleicht Bearbeiten Sie die Frage in einer kürzeren version. Du bist einfach zu Fragen, über das senden-Klasse Wert. Keine Notwendigkeit, eine Menge code hier. Verbessern Sie die Frage, und könnte Ihnen einige upvotes... 🙂
Wenn
very hard == impossible
Ja. :)
Möchten Sie vielleicht Bearbeiten Sie die Frage in einer kürzeren version. Du bist einfach zu Fragen, über das senden-Klasse Wert. Keine Notwendigkeit, eine Menge code hier. Verbessern Sie die Frage, und könnte Ihnen einige upvotes... 🙂
InformationsquelleAutor ghiboz | 2012-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht.
Können Sie Klonen, die Instanz aus und senden Sie es, aber es wird immer noch geschickt durch ref...
Lesen:
Artikel über die übergabe von Variablen in C#
Wikipedia über Objekte kopieren- shallow copy + Tiefe Kopie.
Zitieren Jon Skeet, C# in der Tiefe der zweiten edition:
C# in der Tiefe Werttypen und Referenztypen Seite 46
Hast du den Artikel gelesen den ich verlinkt in meiner Antwort?
Eine andere Sache, stellen Sie sicher, eine deep clone wenn es das ist, was Sie brauchen.
danke für den link, ja, definitiv, wenn ich eine Klasse verwenden, wenn ich Schreibe
private void testClass(cTest test)
oderprivate void testClass(ref cTest test)
ist die gleiche Sache..wenn der pass mit param ref, die Sie verwenden können, s.t wie: test = new cTest(), und die param wird ein neues Objekt, während, wenn pass ohne ref -, test -, werden UNO-ändern, wenn Sie zuweisen: test = new cTest();
InformationsquelleAutor gdoron
Wenn Sie wollen, so etwas wie, dass, Sie verwenden möchten, Streben anstelle von Klassen.
InformationsquelleAutor justin.lovell