如何限制c#的引用行为?我不想改变全局变量的原始值,但是当它被分配给局部变量时它会改变,如果对局部变量做了任何更改,它也会影响全局变量。如何避免这种情况? / p>
先谢谢..
答案 0 :(得分:1)
在C#中,默认情况下作为值传递的所有参数 - 原始值的副本 对于引用类型,复制值是给定对象的引用(内存地址)。
显然,您的全局变量是引用类型。在方法中更改字段/属性会对原始值产生影响 请考虑以下示例:
第一个例子 - 更改成员
public void HandleObject(MyType value)
{
value.Member = 5;
}
public void Main()
{
MyType value = new MyType { Member = 3 };
Console.WriteLine(value.Member);
HandleObject(value);
Console.WriteLine(value.Member);
//Will print
// 3
// 5
}
第一个示例 - 创建新实例不会产生影响
public void HandleObject(MyType value)
{
value = new MyType { Member = 5 };
}
public void Main()
{
MyType value = new MyType { Member = 3 };
Console.WriteLine(value.Member);
HandleObject(value);
Console.WriteLine(value.Member);
//Will print
// 3
// 3
}
因此,在您的情况下,您可以创建全局对象的副本并将副本传递给方法。