Kaedah Sambungan C# dan Pengubahsuai "ref": Memahami Nuansa Parameter "ini"
Kaedah sambungan C# meningkatkan jenis sedia ada dengan fungsi baharu tanpa mengubah kod asalnya. Walau bagaimanapun, perbezaan utama timbul apabila menggunakan pengubah suai ref
dengan parameter this
, khususnya mengenai cara ia memberi kesan kepada contoh yang dilanjutkan.
ref
Pengubah suai dalam Argumen Kaedah Sambungan
Kaedah sambungan boleh menerima hujah yang diubah suai oleh ref
, membenarkan perubahan kepada nilai asal. Pertimbangkan:
public static void Modify(ref int x, int y) { x = y; }
Ini sah kerana ref
mengubah suai parameter biasa.
Sekatan ke atas ref this
Sekatan timbul apabila menggunakan ref
pada parameter this
:
public static void ModifyExtension(this ref int x, int y) { x = y; } //Compiler Error
Ini menjana ralat pengkompil.
Konteks Sejarah (Pra-C# 7.2)
Sebelum C# 7.2, had ini berpunca daripada kekangan pengkompil. Pengkompil mengendalikan parameter this
secara berbeza, menghalang semantik ref
.
C# 7.2 dan Seterusnya: Mendayakan ref this
C# 7.2 menangani had ini. Kini, ref
boleh digunakan dengan parameter this
, terutamanya berfaedah untuk mengubah suai jenis nilai (struktur).
Aplikasi Praktikal: Mengubah Suai Struktur
Ciri ini terbukti tidak ternilai apabila bekerja dengan struct, membolehkan pengubahsuaian di tempat dalam kaedah sambungan. Contohnya:
public struct MyData { public string Value { get; set; } } public static class MyDataExtensions { public static void UpdateValue(this ref MyData data, string newValue) { data.Value = newValue; } }
Di sini, UpdateValue
mengubah secara langsung sifat Value
bagi struktur MyData
. Ini mengelakkan penciptaan contoh struct baharu, meningkatkan prestasi.
Atas ialah kandungan terperinci Mengapa 'ref' Tidak Boleh Digunakan dengan Parameter 'ini' dalam Kaedah Sambungan C# (Sebelum C# 7.2)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!