c# - 在方法中更改类属性值

标签 c# class oop reference-type

我有以下代码

public class Myclass
{
    public int someProp{ get; set; };
}
public class Program
{
    public static void Main(string[] args)
    {
        Myclass m = new Myclass();
        Console.WriteLine(m.someProp);
        ChangeValue(m);
        Console.WriteLine(m.someProp);
        SetToNull(m);
        Console.WriteLine(m.someProp);
        Console.ReadKey();
    }
    static void ChangeValue(Myclass m)
    {
        m.someProp = 10;
    }
    static void SetToNull(Myclass m)
    {
        m = null;
    }
}

结果是0 10 10
我想知道为什么在我将类设置为 null 后它显示 10。
传递给方法的 m 是对象的副本还是只是引用。

最佳答案

Is the m which is pass to the method is a copy of the object or it's just reference.

您正在将“m”引用的副本传递给这些方法。如果您想传递对内存中 MyClass 对象的实际引用,您可以使用 ref 关键字:

public class Program
{
    public static void Main(string[] args)
    {
        Myclass m = new Myclass();
        SetToNull(ref m);
        if(m == null)
            Console.WriteLine("NULL!");
        Console.ReadKey();
    }

    static void SetToNull(ref Myclass m)
    {
        m = null;
    }
}

然后 SetToNull 方法会将实际的“m”引用设置为空引用。

关于c# - 在方法中更改类属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41430224/

相关文章:

c# - 为什么不能在 VS2010 C# 中使用 ManagementObjectSearcher

php - Twig 内部结构 : setCompiler

c++ - “T”不是参数 'T' 的有效模板类型参数

php - 为什么要开始用 PHP 编写面向对象的代码?

c# - 如何在网络应用程序(mvc/asp.net)中实现视频聊天?

c# - 获取#define变量的列表

css - 选择具有以字符串开头的类的元素

java - 书籍对象的 boolean 值

oop - OOP 范式在真正复杂的系统中的局限性?

c# - 来自当前用户的 PSCredentials