Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kaedah Sambungan Menggunakan Pengubahsuai `ref` untuk Parameter Pertamanya?

Bolehkah Kaedah Sambungan Menggunakan Pengubahsuai `ref` untuk Parameter Pertamanya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-07 17:02:40738semak imbas

Can Extension Methods Use the `ref` Modifier for Their First Parameter?

Kaedah sambungan dengan ref pengubah suai

Dalam kaedah sambungan, dilarang menggunakan pengubah suai this pada parameter pertama (biasanya dipanggil parameter ref). Sebab utama adalah seperti berikut:

Tidak serasi dengan prinsip reka bentuk bahasa C#:

Kaedah sambungan direka bentuk untuk menyediakan cara untuk mewarisi tanpa mengubah suai jenis asal. Membenarkan ref untuk hujah pertama akan melanggar prinsip ini, kerana ia akan membenarkan pengubahsuaian langsung bagi contoh asal.

Isu keselamatan jenis yang berpotensi:

Melewati jenis nilai (struct) melalui rujukan melalui parameter pertama mungkin membenarkan kaedah sambungan mengubah suai tika asal, walaupun kaedah itu diisytiharkan dalam kelas statik. Ini boleh membawa kepada ketidakkonsistenan dan tingkah laku yang tidak dijangka.

Walau bagaimanapun, dalam C# 7.2 dan ke atas:

Spesifikasi bahasa C# telah dikemas kini untuk membenarkan penggunaan ref untuk hujah pertama kaedah sambungan. Fungsi ini terhad kepada jenis nilai (struktur) dan membenarkan pengubahsuaian contoh asal. Perlu diingat bahawa ciri ini tidak berfungsi dengan jenis rujukan (kelas, antara muka, rekod).

Contoh:

Contoh berikut menggambarkan penggunaan ref dalam kaedah sambungan:

<code class="language-csharp">public struct MyProperties
{
    public string MyValue { get; set; }
}

public static class MyExtensions
{
    public static void ChangeMyValue(this ref MyProperties myProperties)
    {
        myProperties.MyValue = "来自MyExtensions的问候";
    }
}

public class MyClass
{
    public MyClass()
    {
        MyProperties myProperties = new MyProperties();
        myProperties.MyValue = "你好,世界";
        myProperties.ChangeMyValue(); //调用扩展方法修改值
    }
}</code>

Dalam contoh ini, kaedah sambungan ChangeMyValue mengubah suai sifat MyProperties bagi tika MyValue asal, yang merupakan jenis nilai. Dengan menggunakan ref, kaedah ini boleh terus mengakses tika dan dengan itu menukar keadaannya.

Atas ialah kandungan terperinci Bolehkah Kaedah Sambungan Menggunakan Pengubahsuai `ref` untuk Parameter Pertamanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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