C# 为什么对象未更新为NULL

C# 为什么对象未更新为NULL,c#,object,C#,Object,当我将我的obj更新为null时,其输出为30,但没有例外,但当我更新obj.Age=25时,其输出为25 我不知道幕后发生了什么。 有人能解释为什么会这样吗 public class A { public int age; } class Program { public static void Test(A obj) { //obj = null; //obj.age = 25; } static void Main

当我将我的
obj
更新为
null
时,其输出为30,但没有例外,但当我更新
obj.Age=25时,其输出为25

我不知道幕后发生了什么。 有人能解释为什么会这样吗

public class A
{
    public int age;
}

class Program
{
    public static void Test(A obj)
    {
        //obj = null;
        //obj.age = 25;
    }

    static void Main(string[] args)
    {
        try
        {
            A obj = new A();
            obj.age = 30;
            Test(obj);
            Console.WriteLine(obj.age);
        }
        catch (Exception)
        {
            throw;
        }
    }
}

当您执行
obj=null时
则不将对象设置为null,而是将对该对象的引用设置为
null
。在方法
Test
中,参数是对传递对象的新引用,它不会影响
Main
中的
obj
引用,因此在
Test
中将
obj
设置为
null
仅对该方法有效。
要执行/查看所需操作,您可能需要将
Test
的参数更改为如下参数

public static void Test(ref A obj)
...
A obj = new A();
obj.age = 30;
Test(ref obj);
...  
public static void Test(ref A obj)
然后像这样调用
Test

public static void Test(ref A obj)
...
A obj = new A();
obj.age = 30;
Test(ref obj);
...  
public static void Test(ref A obj)
现在您实际上修改了
Main
方法的
obj
引用


当你做
obj.age=25Test
中的code>(当然不需要在前面将
obj
设置为
null
),然后修改与
Main
中的
obj
指向的对象相同的对象,因此在将
age
写入控制台时,您将看到25。

这是可能的,因为它是通过引用传递的-如果将
A
替换为例如
int
并传递,那么在
Test
中更改其值将不会反映在
Main
的输出中,因为整数是通过值传递的。您可能会发现阅读本文档及其后续页面很有帮助

注意方法签名-

public static void Test(A obj)
参数未作为
ref
传递。当引用类型作为参数传递时,不指定为
ref
。可以更改对象内的属性值,但不能指定对象将其指向其他内存位置

简单地说,你做不到-
obj=null
obj=newa()
obj=instanceOfAnotherObject

为了能够更改对象,您需要更改方法签名并通过ref-