为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
蓝山帝景 2019-06-18 10:58:38
在C#中通过引用或值传递对象在C#中,我一直认为非原始变量是通过引用传递的,而原语值是通过值传递的。因此,当将任何非原始对象传递给方法时,对方法中的对象所做的任何操作都会影响所传递的对象。(C#101)然而,我注意到当我通过System.Drawing.ImageObject时,情况似乎并非如此?如果我将一个system.draing.Image对象传递给另一个方法,并将一个图像加载到该对象上,那么让该方法超出作用域并返回到调用方法时,该图像不会加载到原始对象上?这是为什么?
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

对象根本没有通过。默认情况下,将对参数进行计算,并将其价值作为要调用的方法的参数的初始值传递。现在重要的一点是,该值是引用类型的引用-一种获取对象(或NULL)的方法。调用方可以看到对该对象的更改。但是,将参数的值更改为引用不同的对象当您使用PASASBY值时,必须是可见的,这是类型。

如果您想使用按引用传递的方法,则使用outref参数类型是值类型还是引用类型。在这种情况下,变量本身实际上是通过引用传递的,因此参数使用与参数相同的存储位置-调用方可以看到对参数本身的更改。

因此:

public void Foo(Image image){
    // This change won't be seen by the caller: it's changing the value
    // of the parameter.
    image = Image.FromStream(...);}public void Foo(ref Image image){
    // This change *will* be seen by the caller: it's changing the value
    // of the parameter, but we're using pass by reference
    image = Image.FromStream(...);}public void Foo(Image image){
    // This change *will* be seen by the caller: it's changing the data
    // within the object that the parameter value refers to.
    image.RotateFlip(...);}

我有一个这篇文章将更详细地介绍..基本上,“通过引用”并不意味着你认为它意味着什么。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 785 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信