我有以下代码
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/