Rumah > pembangunan bahagian belakang > C++ > Mengapa Parameter Pertama Kaedah Sambungan C# Tidak Boleh Menjadi Parameter `ref`?

Mengapa Parameter Pertama Kaedah Sambungan C# Tidak Boleh Menjadi Parameter `ref`?

Barbara Streisand
Lepaskan: 2025-01-07 16:57:42
asal
1022 orang telah melayarinya

Why Can't the First Parameter of a C# Extension Method Be a `ref` Parameter?

Kaedah Sambungan C#: Mengapa Parameter Pertama Tidak Boleh ref (Kebanyakannya)

Kaedah sambungan menambah kefungsian pada jenis sedia ada dengan elegan tanpa mengubah kod sumbernya. Walau bagaimanapun, had utama wujud: parameter pertama—mewakili instance kaedah beroperasi—tidak boleh menjadi parameter ref (dengan pengecualian yang dinyatakan di bawah).

Sebab di sebalik Sekatan

Kata kunci ref membenarkan kaedah mengubah suai secara langsung nilai pembolehubah yang diluluskan sebagai hujah. Dalam panggilan kaedah standard, ini boleh diterima dengan sempurna. Tetapi dengan kaedah sambungan, parameter pertama secara tersirat mewakili objek sambungan dipanggil. Membuat parameter ini ref secara asasnya akan mengubah cara kaedah sambungan berfungsi.

Kaedah sambungan melanjutkan gelagat sesuatu jenis; ia tidak menggantikan atau mencipta kejadian baharu. Membenarkan parameter ref pada hujah pertama akan membenarkan kaedah sambungan menggantikan objek asal dengan objek yang berbeza sama sekali, memecahkan konsep teras kaedah sambungan.

Contoh Ilustrasi

Pertimbangkan kaedah biasa:

<code class="language-csharp">public static void Modify(ref MyClass obj, MyClass newObj)
{
    obj = newObj; //Directly replaces the original object
}</code>
Salin selepas log masuk

Sekarang, bayangkan kaedah sambungan analog (secara hipotesis dibenarkan):

<code class="language-csharp">public static void ModifyExtension(this ref MyClass obj, MyClass newObj)
{
    obj = newObj; //Would replace the original object
}</code>
Salin selepas log masuk

Kaedah sambungan hipotetikal ini tidak akan mengubah suai obj asal tetapi sebaliknya akan menetapkan objek baharu kepada pembolehubah yang merujuknya. Tingkah laku ini tidak konsisten dengan tujuan kaedah sambungan yang dimaksudkan.

C# 7.2 dan Jenis Nilai: Pengecualian

Walaupun sekatan biasanya berlaku untuk jenis rujukan (kelas, antara muka), C# 7.2 memperkenalkan pengecualian untuk jenis nilai (struktur). Dengan struct, menggunakan ref pada parameter pertama adalah dibenarkan.

Ini membolehkan mencipta kaedah sambungan yang boleh mengubah suai keadaan dalaman sesuatu struct. Walau bagaimanapun, adalah penting untuk mengingati pengecualian ini hanya digunakan pada jenis nilai, bukan jenis rujukan. Prinsip teras untuk mengekalkan contoh asal kekal untuk jenis rujukan.

Atas ialah kandungan terperinci Mengapa Parameter Pertama Kaedah Sambungan C# Tidak Boleh Menjadi Parameter `ref`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan