首頁 >後端開發 >C++ >為什麼更改為system.drawing.image對像傳遞給C#方法並不總是持續存在?

為什麼更改為system.drawing.image對像傳遞給C#方法並不總是持續存在?

Patricia Arquette
Patricia Arquette原創
2025-01-31 00:51:08992瀏覽

Why Do Changes to a System.Drawing.Image Object Passed to a C# Method Not Always Persist?

了解C#對象引用和System.Drawing.Image>

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn