Rumah > pembangunan bahagian belakang > C++ > Mengapa Tanda Kurung Pilihan dalam Beberapa Pemula Objek C# tetapi Diperlukan dalam Lain?

Mengapa Tanda Kurung Pilihan dalam Beberapa Pemula Objek C# tetapi Diperlukan dalam Lain?

Mary-Kate Olsen
Lepaskan: 2025-01-15 13:37:43
asal
659 orang telah melayarinya

Why Are Parentheses Optional in Some C# Object Initializers but Required in Others?

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:

  • Memudahkan reka bentuk, spesifikasi dan proses pembangunan serta mengurangkan beban kerja.
  • Hapuskan lebihan kerana apabila menggunakan pemula objek untuk penetapan harta, senarai parameter biasanya tidak hadir.
  • Beban penyelenggaraan yang rendah kerana ciri ini tidak mempunyai sebarang pepijat yang diketahui sejak pelaksanaannya.

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

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:

  • Semak dan analisis sintaks dan semantik secara manual.
  • Bukti rasmi, biasanya oleh pasukan penyelidik luar.
  • Gunakan penjana parser untuk analisis mesin untuk mencari kemungkinan kekaburan.

Contoh potensi kekaburan

Pertimbangkan untuk menambah operator awalan baharu "frob":

<code class="language-csharp">x = frob 123 + 456;</code>
Salin selepas log masuk

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

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!

sumber:php.cn
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