C# 为什么';装箱和拆箱的工作方法是什么?
基本上我有点好奇。当您创建一个C# 为什么';装箱和拆箱的工作方法是什么?,c#,.net,oop,C#,.net,Oop,基本上我有点好奇。当您创建一个对象实例并尝试在main方法的范围之外使用它时,它不会通过其他方法返回最终值(5),即使它是一个引用类型的对象 为什么呢 我想这与拳击无关,它对物体的行为方式也一样 传递对方法的引用时,不能在该方法中对其进行更改。因为参数是按值传递的,所以您可以将其更改为引用 在这两种情况下,您都可以使用ref关键字获得5。我想这与装箱无关,它对对象的行为也会相同 传递对方法的引用时,不能在该方法中对其进行更改。因为参数是按值传递的,所以您可以将其更改为引用 在这两种情况下,您都可
对象
实例并尝试在main方法的范围之外使用它时,它不会通过其他方法返回最终值(5),即使它是一个引用类型的对象
为什么呢 我想这与拳击无关,它对物体的行为方式也一样 传递对方法的引用时,不能在该方法中对其进行更改。因为参数是按值传递的,所以您可以将其更改为引用
在这两种情况下,您都可以使用
ref
关键字获得5。我想这与装箱无关,它对对象的行为也会相同
传递对方法的引用时,不能在该方法中对其进行更改。因为参数是按值传递的,所以您可以将其更改为引用
在这两种情况下,您都可以使用
ref
关键字来获取5。如果int是对象的属性,这将起作用(因为两个引用都指向堆中的同一个对象)
Int(甚至作为一个对象)是不可变的(就像字符串一样),所以使用“a=5”只需创建一个新对象并删除参数的引用。(但调用代码仍具有以前的引用)
您可以使用“ref”关键字执行任何操作:
output : 10 in both cases
如果int是一个对象的属性,这将起作用(因为两个引用都指向堆中的同一个对象) Int(甚至作为一个对象)是不可变的(就像字符串一样),所以使用“a=5”只需创建一个新对象并删除参数的引用。(但调用代码仍具有以前的引用) 您可以使用“ref”关键字执行任何操作:
output : 10 in both cases
int
是值类型,按值传递,而不是按引用传递。您可以使用ref
关键字通过引用传递it。同样,尽管Object
是引用类型,obj
也通过值传递,而不是通过引用FunnyMethod
是获取引用的副本,并且您正在将a
分配给一个新的装箱实例。装箱不会将值包装在可变容器中。int
是值类型,通过值传递,而不是通过引用传递。您可以使用ref
关键字通过引用传递it。同样,尽管Object
是引用类型,obj
也通过值传递,而不是通过引用FunnyMethod
是获取引用的副本,并且您正在将a
分配给一个新的装箱实例。装箱不会将值包装在可变容器中。
public static void FunnyMethod(ref object a)
{ a = 5; }
public static void NotSoFunnyMethod(int a)
{ a = 5; }
public static void Main(string[] args)
{
int number = 10;
object obj = number;
FunnyMethod(ref obj);
Console.WriteLine(obj);
NotSoFunnyMethod((int)obj);
Console.WriteLine(obj);
}