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

Bagaimanakah Resolusi Lebihan Kaedah C# Mengendalikan Argumen Null?

Linda Hamilton
Linda Hamiltonasal
2025-01-16 15:38:09730semak imbas

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>

Apabila anda menghantar nilai nol sebagai parameter, contohnya:

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

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>

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>

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!

Kenyataan:
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