c# - 对象行为

标签 c#

谁能解释下面代码的行为。以下代码的输出是字符串“str”,i 的值为 100。

但为什么会这样呢?设置object c1 = null后,为什么不为null?

public class Class1
{
    public int i;
    public Class1()
    {
        i = 10;
    }    

    public string method1()
    {
        return "str";
    }
}

public class Class2
{
    public void method2(Class1 c1)
    {
        c1.i = 100;
        c1 = null;
    }
}

    void main()
    {
        Class1 c1 = new Class1();
        Class2 c2 = new Class2();
        c2.method2(c1);
        Response.Write(c1.method1());
        Response.Write(c1.i.ToString());
    }

最佳答案

当您调用 method2(Class1 c1) 时,您传递的是对象引用的副本,而不是对象本身(或对象的引用)。当您设置 c1 = null 时,您将引用的副本设置为 null,而不是对象。

您可以通过将方法签名更改为此来获得您期望的行为:

方法 2(引用 Class1 c1)

关于c# - 对象行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215078/

相关文章:

c# - ElasticSearch.NET 在 POST 请求中传递 AWS Signature v4?

c# - 在 MVVM 中绑定(bind) ItemsControl 的最佳实践

c# - 无法使用 Microsoft.Azure.ServiceBus 连接到 Azure ServiceBus

c# - 使用 XML 调用 WCF 服务

c# - 构造函数过度注入(inject)类型专注于收集数据

c# - ASP.NET 2.0 从控件强制使用 SSL

c# - .NET MAUI Shell - 导航后显示汉堡包图标

c# - 在 C# 中使构造函数仅接受具有 [Serializable] 属性的对象

c# - 捕获并保存电子垫/签名

c# - 谓词和 OrderBy , Func