Ich war auf einem Demo-Verfahren zu arbeiten und fand etwas seltsam (zumindest für mich :-))ref Art und Werttyp in Allgemein
enter code here class Program
{
public void AnotherSwap<T>(T a, T b)
{
T temp;
temp = a;
a = b;
b = temp;
Console.WriteLine(a);
Console.WriteLine(b);
}
public void swap<T>(T a, T b) where T : MyInt // Passing without ref
{
object temp;
temp = a.MyProperty;
a.MyProperty = b.MyProperty;
b.MyProperty = (int)temp;
Console.WriteLine(a.MyProperty);
Console.WriteLine(b.MyProperty);
}
static void Main(string[] args)
{
Program p = new Program();
MyInt a = new MyInt() { MyProperty = 10 };
MyInt b = new MyInt() { MyProperty = 20 };
p.swap<MyInt>(a, b);
Console.WriteLine(a.MyProperty); // changed values get reflected
Console.WriteLine(b.MyProperty); // changed values get reflected
Console.WriteLine("Another Swap");
object x = 10;
object y = 20;
p.AnotherSwap(x, y);
Console.WriteLine(x); // changed values are not getting reflected
Console.WriteLine(y); // changed values are not getting reflected
Console.ReadKey();
}
public class MyInt
{
public int MyProperty { get; set; }
}
}
Hier, wenn ich den Swap nenne(), obwohl ich haven ref nicht erwähnt, werden die geänderten Werte automatisch reflektiert (wie in p.swap (a, b); a und b sind Instanzen von Myint und werden daher standardmäßig als ref..as nach meinem Verständnis funktionieren.) Aber gleich sollte mit Anotherswap() geschehen, hier gebe ich auch Objekt x, y weiter, aber jetzt werden die Werte nicht in Main() .ie widergespiegelt Jetzt arbeitet es als Werttyp. Kann jemand erklären, wo mein Verständnis falsch läuft? Lassen Sie mich wissen, wenn Sie mehr Informationen wünschen.
danke Chris, ich habe den Punkt. – Wondering