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);
    }