Rumah >pembangunan bahagian belakang >C++ >Mengapa perubahan kepada objek System.Drawing.Image diluluskan kepada kaedah C# tidak selalu berterusan?
Memahami C# Rujukan Objek dan Anomali System.Drawing.Image
membentangkan situasi yang unik. Mari kita jelaskan tingkah laku. System.Drawing.Image
nuansa objek lulus
sangat penting untuk memahami bahawa C# tidak langsung lulus objek; Ia melewatirujukan ke objek. Untuk jenis rujukan, rujukan ini disalin oleh nilai. Ini bermakna kaedah menerima salinan rujukan, bukan objek itu sendiri.
tingkah laku System.Drawing.Image
ke kaedah, sebarang perubahan yang System.Drawing.Image
menggantikan keseluruhan objek (mis., Menetapkan imej baru) tidak akan dapat dilihat di luar kaedah. Ini kerana kaedah ini berfungsi dengan salinan rujukan. Menetapkan semula rujukan dalam kaedah ini mencipta rujukan baru, meninggalkan asal tidak berubah.
pass-by-value vs. lulus-by-reference
Tingkah laku lalai dalam C# adalah lulus demi nilai untuk kedua-dua jenis nilai dan jenis rujukan. Walau bagaimanapun, anda boleh menggunakan kata kunci atau ref
secara eksplisit untuk memaksa lulus-oleh-rujukan. out
pass-by-value (lalai): Kaedah menerima salinan rujukan (untuk jenis rujukan) atau salinan nilai (untuk jenis nilai). Perubahan yang dibuat kepada parameter dalam kaedah tidak menjejaskan asal.
pass-by-reference (/ref
): out
Kaedah secara langsung mengakses objek asal atau pembolehubah. Perubahan dapat dilihat oleh pemanggil.
Contoh kod ilustrasi:
<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>
Menunjukkan perbezaannya. Versi pertama tidak mengubah imej asal; yang kedua tidak. Walau bagaimanapun, menunjukkan bahawa mengubahsuai sifat ModifyImage
ManipulateImage
imej (seperti putaran) tidak mempengaruhi asal kerana ia mengubah keadaan dalaman objek, bukan rujukan itu sendiri. Perbezaan utama adalah antara menggantikan keseluruhan objek berbanding mengubah suai sifatnya.
Atas ialah kandungan terperinci Mengapa perubahan kepada objek System.Drawing.Image diluluskan kepada kaedah C# tidak selalu berterusan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!