首页 >后端开发 >C++ >C#如何处理将对象传递到方法:参考或值?

C#如何处理将对象传递到方法:参考或值?

Linda Hamilton
Linda Hamilton原创
2025-01-31 00:31:09258浏览

How Does C# Handle Passing Objects to Methods: Reference or Value?

深入探讨 C# 中的对象传递:引用与值

在 C# 中,向方法传递对象一直是一个基本概念。通常认为,非原始类型是按引用传递的,方法内所做的更改会保留,而原始值是按值传递的,会创建单独的副本。

然而,出现了一个异常:当将 System.Drawing.Image 对象传递给方法并在该方法中修改其图像时,返回调用方后,原始 Image 对象保持不变。

揭示真相:值传递与引用传递

要理解这种现象,我们需要阐明 C# 中对象传递的真实本质。对象本身不会被传递;相反,它们的值作为方法的初始参数传递。对于引用类型,该值是对实际对象的引用,允许在调用方中看到对底层对象的更改。

值传递和引用传递的细微差别

默认情况下,C# 对所有类型(包括引用类型)都使用“值传递”。这意味着对象的副本作为参数的初始值传递。对参数值所做的更改不会影响原始对象。

要从方法内部更改对象的属性值,“引用传递”可以通过在参数声明中指定 out 或 ref 关键字来使用。在这种情况下,参数有效地引用与参数相同的内存位置,对参数的更改将在调用方可见。

示例代码:

<code class="language-csharp">public void Foo(Image image) // 默认:值传递
{
    image = Image.FromStream(...); // 此更改调用方将看不到。
}

public void Foo(ref Image image) // 引用传递
{
    image = Image.FromStream(...); // 此更改对调用方可见。
}

public void Foo(Image image) // 对现有对象进行更改
{
    image.RotateFlip(...); // 此更改对调用方可见。
}</code>

结论

C# 中“值传递”和“引用传递”的概念与其传统理解有所不同。相反,参数的值被传递,要么作为副本(值类型),要么作为引用(引用类型)。要从方法内部更改对象的属性值,可以使用 out 或 ref 关键字进行引用传递。

以上是C#如何处理将对象传递到方法:参考或值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn