Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Resolusi Lebihan Kaedah C# Mengendalikan Argumen Null?

Bagaimanakah Resolusi Lebihan Kaedah C# Mengendalikan Argumen Null?

Linda Hamilton
Lepaskan: 2025-01-16 15:38:09
asal
729 orang telah melayarinya

How Does C# Method Overload Resolution Handle Null Arguments?

Pengendalian nilai nol dalam resolusi beban berlebihan kaedah C#

Apabila terlebih muatan berbilang kaedah dengan parameter yang berbeza, sistem resolusi beban lampau kaedah akan menentukan kaedah yang hendak dipanggil berdasarkan parameter yang disediakan. Walau bagaimanapun, apabila menghantar nilai nol sebagai parameter, sistem penghuraian mengikut peraturan tertentu.

Untuk memahami proses ini, pertimbangkan kelas bernama EffectOptions yang mempunyai pembina berikut:

<code class="language-csharp">public EffectOptions(params object[] options) { }
public EffectOptions(IEnumerable<object> options) { }
public EffectOptions(string name) { }
public EffectOptions(object owner) { }
public EffectOptions(int count) { }
public EffectOptions(Point point) { }</code>
Salin selepas log masuk

Apabila anda menghantar nilai nol sebagai parameter, contohnya:

<code class="language-csharp">EffectOptions options = new EffectOptions(null);</code>
Salin selepas log masuk

Sistem penghuraian terlebih dahulu mengecualikan semua pembina yang tidak boleh diakses. Dalam kes ini, semua pembina boleh diakses, jadi kami meneruskan ke langkah seterusnya.

Seterusnya, ia mengenal pasti semua pembina yang berkenaan di mana setiap parameter formal mempunyai parameter sepadan yang boleh ditukar secara tersirat kepada jenis parameter formal. Oleh kerana nilai nol boleh ditukar secara tersirat kepada object dan object[], terdapat berbilang pembina yang berkenaan:

<code class="language-csharp">public EffectOptions(object[] options)
public EffectOptions(IEnumerable<object> options)
public EffectOptions(string name)
public EffectOptions(object owner)</code>
Salin selepas log masuk
Salin selepas log masuk

Walau bagaimanapun, jika pembina params object[] berfungsi dalam kedua-dua bentuk dikembangkan dan tidak dikembangkan, bentuk dikembangkan akan dibuang. Ini meninggalkan kita dengan:

<code class="language-csharp">public EffectOptions(object[] options)
public EffectOptions(IEnumerable<object> options)
public EffectOptions(string name)
public EffectOptions(object owner)</code>
Salin selepas log masuk
Salin selepas log masuk

Akhir sekali, sistem menentukan calon terbaik yang boleh digunakan berdasarkan kekhususan. Dalam kes ini, object[] dan string mempunyai kekhususan yang sama, mengakibatkan ralat kekaburan. Pengkompil tidak dapat menentukan pembina yang hendak dipanggil.

Atas ialah kandungan terperinci Bagaimanakah Resolusi Lebihan Kaedah C# Mengendalikan Argumen Null?. 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