了解C#对象引用和
呈现出独特的情况。 让我们澄清行为。System.Drawing.Image
对象传递的细微差别>
>了解C#不直接传递对象是至关重要的。它将引用传递给对象。 对于参考类型,此参考由值复制。 这意味着一种方法接收参考的副本,而不是对象本身。>
行为System.Drawing.Image
替换System.Drawing.Image
整个对象(例如,分配新图像)都不会在方法之外反映。 这是因为该方法正在使用参考的副本。 重新分配该方法中的参考会创建一个新的参考,使原始的参考保持不变。>
>通过价值与逐次传递
c#中的默认行为是两个值类型和参考类型的逐个价值。 但是,您可以明确使用或ref
的关键字来强制通过参考。out
>
>通过逐值(默认值):
>通过逐次参考(/ref
):out
演示了差异。 第一个版本不会改变原始图像。第二个确实如此。但是,
<code class="language-csharp">public void ModifyImage(Image image) // Pass-by-Value { // This reassigns the reference, NOT modifying the original. image = Image.FromFile("newImage.jpg"); } public void ModifyImage(ref Image image) // Pass-by-Reference { // This reassigns the reference, modifying the original. image = Image.FromFile("newImage.jpg"); } public void ManipulateImage(Image image) // Pass-by-Value { // This modifies the *contents* of the original image. image.RotateFlip(RotateFlipType.Rotate90FlipNone); }</code>表明,图像的
属性(如旋转)ModifyImage
> do ManipulateImage
会影响原始,因为它正在更改对象的内部状态,而不是参考本身,因此会影响原始。 关键区别在于替换整个对象而不是修改其属性。
以上是为什么更改为system.drawing.image对象传递给C#方法并不总是持续存在?的详细内容。更多信息请关注PHP中文网其他相关文章!