如何通过引用默认行为来限制传递

时间:2016-09-19 05:56:07

标签: c#

如何限制c#的引用行为?我不想改变全局变量的原始值,但是当它被分配给局部变量时它会改变,如果对局部变量做了任何更改,它也会影响全局变量。如何避免这种情况? / p>

先谢谢..

1 个答案:

答案 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
}

因此,在您的情况下,您可以创建全局对象的副本并将副本传递给方法。

相关问题