Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kaedah Sambungan Menggunakan Pengubahsuai `ref` untuk Parameter Pertamanya?
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!