Rumah > pembangunan bahagian belakang > C++ > Mengapa 'ref' Tidak Boleh Digunakan dengan Parameter 'ini' dalam Kaedah Sambungan C# (Sebelum C# 7.2)?

Mengapa 'ref' Tidak Boleh Digunakan dengan Parameter 'ini' dalam Kaedah Sambungan C# (Sebelum C# 7.2)?

Patricia Arquette
Lepaskan: 2025-01-07 16:41:43
asal
355 orang telah melayarinya

Why Can't

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; }
Salin selepas log masuk

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
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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!

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