void函数如何改变通过值而不是通过引用传递给它的原始变量的值?

时间:2016-06-21 15:55:40

标签: c#

我经历了这个:

var bmp = new WriteableBitmap(ImageWidth, ImageHeight, 96, 96, PixelFormat, null); // declaring the variable

_measurement.MasterImage.CopyTo(bmp); // passing the variable by value

TransformedBitmap transformedBmp = new TransformedBitmap( bmp, new RotateTransform(90)); // using the variable with it new value

变量bmp如何更改,我们 通过引用传递?

2 个答案:

答案 0 :(得分:1)

bmp是一个对象,一个引用类型 - 这意味着您要传递对该对象的引用,而不是值。

 public void Resize(WriteableBitmap bmp)
 {
     bmp.Width = 100;       // Changes the object which bmp points to
 }

即使对值的引用是按值传递,也可以更改该对象的内容。

 // Create a new object
 bmp = new WriteableBitmap(ImageWidth, ImageHeight);

 Resize(bmp);      // pass a reference to the object

 // bmp.Width is now 100

请参阅MSDN: Value Types and Reference Types

答案 1 :(得分:0)

“价值”没有改变。它是一个给定的对象,它仍然是那个对象。

如果你想象一个List<string>,可能会更容易想到。您可以将它传递给其他方法,它将始终是同一个对象。其他方法可能会将项添加到列表或删除它们。或者,如果它是具有属性的类,则可以将其传递给更改这些属性的方法。

他们无法更改(除非您通过引用传递)是对象本身。它们无法将其设置为其他对象或将其设置为null。

他们可以完成您可以对该对象执行的任何其他操作。

Here's a blog post我在这里写了一些例子。它会点击,你会看到它。