Apakah sebab mengapa C# 3.0 memperkenalkan tanda kurung pilihan dalam pembina pemula objek?
Sebagai gula sintaksis, C# 3.0 membenarkan menghilangkan tanda kurung dalam panggilan pembina dalam pemula objek, dengan syarat pembina tanpa parameter hadir. Contohnya:
<code class="language-c#">var x = new XTypeName { PropA = value, PropB = value }; // 括号可选</code>
Sebab kurungan pilihan
Pasukan C# memutuskan untuk menjadikan kurungan pilihan berdasarkan pertimbangan berikut:
Mengapa tidak menjadikan tanda kurung sebagai pilihan dalam semua panggilan pembina lalai?
Memperkenalkan kurungan pilihan dalam kes umum boleh mewujudkan kekaburan semantik, seperti dalam contoh berikut:
<code class="language-c#">class P { class B { public class M { } } class C : B { new public void M(){} } static void Main() { new C().M(); // 1 new C.M(); // 2 } }</code>
Dalam kes ini, baris 1 memanggil pembina lalai C dan kemudian memanggil kaedah contoh M, manakala baris 2 mencipta tika baharu B.M dan memanggil pembina lalainya. Menjadikan kurungan pilihan dalam baris 1 menyebabkan kekaburan, memaksa pengkompil untuk memperkenalkan peraturan yang kompleks untuk menyelesaikannya. Kos potensi kerumitan tambahan ini melebihi faedah kurungan pilihan dalam kes ini.
Atas ialah kandungan terperinci Mengapa Tanda Kurung Pilihan dalam Pembina Pemula Objek C# 3.0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!