C#语言理论问题

时间:2010-01-02 09:06:04

标签: c#

给定以下方法,我传递配置byref,然后使用foreach命名集合循环遍历它。在下面的代码示例中,我在循环中更改的值是否会在我通过ref传递的主对象中更新,我的意思是NO浅拷贝?或者你能发现我犯过的任何错误。

更具体地说,我调用config.Value = .....的行,配置对象有一组配置,所以在调用这个函数后,它们会在主对象(配置)中更新吗?

提前致谢。

public static void DecryptProviderValues(ref MyConfiguration configuration)
    {
        foreach (var provider in configuration.Providers)
        {
            var configItems = provider.Configurations;
            foreach (Configuration config in configItems)
            {
                if(EncryptionManager.IsEncrypted(config.value))
                {
                    config.Value = EncryptionManager.Decrypt(config.Value);

                }
            }
        }
    }

2 个答案:

答案 0 :(得分:6)

假设这里的所有项目都是(不是结构),那么是的,但实际上configuration不需要作为{传递{1}};您已经传递引用(按值),并且您没有重新分配引用,因此此处不需要ref at所有即可。您的更改将保留并可供调用者使用。

完全相同的原因是:

ref

这里,因为Configuration x = new Configuration(); Configuration y = x; x.Value = "abc"; Console.WriteLine(y.Value); // writes "abc" (大概)是Configuration,所以只有 一个对象,以及引用的两个变量对象(在简化的层面上,它们是同一对象的美化指针)。

答案 1 :(得分:2)

在你的情况下,没有必要通过configuration传递ref,因为在C#中你正在操纵对类实例的引用。

您可以使用ref通过引用传递intstruct等值类型。