я работал над демо-метода и нашли что-то странное (по крайней мере для меня :-))исх типа в Generic
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; }
}
}
Вот когда я звоню своп(), хотя убежище I 't упомянутый ref, измененные значения автоматически отражаются (как в p.swap (a, b); a и b являются экземпляром Myint и, таким образом, будут работать по умолчанию как ref..as для моего понимания.) Но то же самое должно произойти с Anotherswap() здесь также я передаю объект x, y, но теперь значения не отражаются в Main() .ie теперь он работает как тип значения. Может кто-нибудь объяснить, где мое понимание идет не так. Дайте мне знать, если вы хотите получить больше информации.
спасибо Крис, я понял. – Wondering