Kurungan pilihan dalam pembina pemula objek C#: sebab dan nyahkekaburan
Dalam C# 3.0, pembina pemula objek membenarkan kurungan ditinggalkan jika pembina tanpa parameter hadir. Ciri ini telah ditambahkan berdasarkan faktor berikut:
Kurungan tiada dalam panggilan pembina lalai
Walau bagaimanapun, dalam ungkapan penciptaan objek tanpa pemula objek, kurungan dalam panggilan pembina lalai masih diperlukan. Sekatan ini adalah untuk mengelakkan kekaburan. Contohnya, dalam kod berikut:
<code class="language-csharp">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>
Barisan 1 mencipta objek C baharu, memanggil pembina lalainya dan memanggil kaedah contoh M pada objek baharu. Baris 2 mencipta contoh B.M dan mencetuskan pembina lalainya. Jika kurungan dalam baris 1 adalah pilihan, baris 2 akan menjadi samar-samar kerana ia juga boleh merujuk kepada C.M.
Kaedah pengesanan yang tidak jelas
Menentukan kekaburan dalam fungsi C# melibatkan beberapa kaedah:
Contoh potensi kekaburan
Pertimbangkan untuk menambah operator awalan baharu "frob":
<code class="language-csharp">x = frob 123 + 456;</code>
Ini boleh ditafsirkan sebagai melakukan operasi frob pada hasil 123 456, atau memberikan 10 kepada pembolehubah jenis frob bernama x.
Dalam contoh lain, ungkapan berikut dalam C# 2.0 adalah samar-samar:
<code class="language-csharp">yield(x);</code>
Ia boleh bermakna menghasilkan x dalam lelaran, atau ia boleh bermakna memanggil kaedah hasil dengan x sebagai parameter. Kekaburan itu dikeluarkan dengan menukarnya kepada "hasil pulangan(x)".
Atas ialah kandungan terperinci Mengapa Tanda Kurung Pilihan dalam Beberapa Pemula Objek C# tetapi Diperlukan dalam Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!