Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Resolusi Lebihan Kaedah C# Mengendalikan Nilai Null Apabila Berbilang Pembina Wujud?

Bagaimanakah Resolusi Lebihan Kaedah C# Mengendalikan Nilai Null Apabila Berbilang Pembina Wujud?

DDD
Lepaskan: 2025-01-16 15:12:10
asal
608 orang telah melayarinya

How Does C# Method Overload Resolution Handle Null Values When Multiple Constructors Exist?

Kaedah C# resolusi lebihan beban dan pengendalian nilai nol

Dalam pengaturcaraan berorientasikan objek, kelebihan beban kaedah membenarkan penggunaan berbilang kaedah dengan nama yang sama tetapi parameter berbeza. Apabila panggilan kaedah dibuat, resolusi beban lampau menentukan kaedah yang hendak dipanggil. Sistem ini menjadi sangat penting apabila berurusan dengan nilai nol.

Pertimbangkan kelas berikut:

<code class="language-csharp">public class EffectOptions
{
    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 mencipta tika baharu EffectOptions dengan nilai nol, contohnya:

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

Proses peleraian beban terlebih dahulu mengenal pasti semua pembina yang boleh diakses:

<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

Seterusnya, buang pembina yang tidak berkenaan berdasarkan jenis parameter. Dengan mengandaikan Point ialah jenis nilai, versi "int" dan "Point" akan dihapuskan. Baki:

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

Sistem resolusi beban lampau kemudian mempertimbangkan pembina "params". Oleh kerana ia boleh dikembangkan atau tidak, bentuk yang dikembangkan dibuang. Ini menghasilkan pembina calon berikut:

<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

Akhir sekali, kenal pasti calon yang terbaik. Ini melibatkan membandingkan kekhususan parameter formal. "objek" kurang spesifik daripada semua jenis lain, jadi versi "objek" dihapuskan. IEnumerable<object> juga kurang spesifik daripada object[] dan oleh itu dihapuskan. Dua calon kekal:

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

Walau bagaimanapun, memandangkan object[] tidak lebih atau kurang spesifik daripada string, ini mengakibatkan ralat kekaburan. Sistem resolusi beban lampau akhirnya tidak dapat menentukan pembina yang hendak dipanggil.

Atas ialah kandungan terperinci Bagaimanakah Resolusi Lebihan Kaedah C# Mengendalikan Nilai Null Apabila Berbilang Pembina Wujud?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan