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
DDDasal
2025-01-16 15:12:10611semak imbas

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>

Apabila mencipta tika baharu EffectOptions dengan nilai nol, contohnya:

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

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>

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>

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>

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>

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!

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