首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中通过引用或值传递对象

在C#中通过引用或值传递对象
EN

Stack Overflow用户
提问于 2012-01-03 14:19:54
回答 5查看 270K关注 0票数 290

在C#中,我一直认为非原语变量是通过引用传递的,而原始值是通过值传递的。

因此,当向方法传递任何非基元对象时,方法中对该对象所做的任何操作都会影响所传递的对象。(C# 101资料)

然而,我注意到,当我传递一个System.Drawing.Image对象时,情况似乎并非如此?如果我将一个system.drawing.image对象传递给另一个方法,并将图像加载到该对象上,然后让该方法超出作用域并返回到调用方法,该图像不会加载到原始对象上吗?

为什么会这样呢?

EN

回答 5

Stack Overflow用户

发布于 2012-01-03 14:25:03

当您将System.Drawing.Image类型对象传递给某个方法时,实际上是在传递该对象的引用副本。

因此,如果在该方法中,您正在加载使用new/copied引用加载的新图像。您不能在原始版本中进行更改。

YourMethod(System.Drawing.Image image)
{
    //now this image is a new reference
    //if you load a new image 
    image = new Image()..
    //you are not changing the original reference you are just changing the copy of original reference
}
票数 5
EN

Stack Overflow用户

发布于 2012-01-03 14:24:40

你是如何将对象传递给方法的?

你是否在object的方法中做了一些新的事情?如果是这样的话,你必须在方法中使用ref

下面的链接给了你更好的想法。

http://dotnetstep.blogspot.com/2008/09/passing-reference-type-byval-or-byref.html

票数 3
EN

Stack Overflow用户

发布于 2021-09-03 04:15:39

在最新版本的C#中,即撰写本文时的C# 9中,对象默认由ref传递。因此,对调用函数中的对象所做的任何更改都将保留在被调用函数中的对象中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8708632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档