Kaedah C# Resolusi Lebihan: Menavigasi Argumen Null
Mekanisme resolusi beban berlebihan kaedah C# menentukan kaedah yang hendak digunakan apabila berbilang kaedah berkongsi nama tetapi berbeza dalam tandatangannya. Proses ini amat menarik apabila berurusan dengan hujah nol.
Proses Penyelesaian:
Kaedah Boleh Dicapai: Sistem pada mulanya mengenal pasti semua kaedah boleh diakses yang sepadan dengan panggilan.
Kaedah Tidak Berkenaan: Kaedah dibuang jika parameternya tidak boleh ditukar secara tersirat daripada argumen yang disediakan.
params
Pengendalian Parameter: Jika kaedah berasaskan params
terpakai dalam kedua-dua bentuk dikembangkan dan tidak dikembangkan, versi dikembangkan akan diabaikan.
Pilihan Padanan Terbaik: Baki kaedah terpakai dinilai untuk "padanan terbaik." Jenis yang lebih khusus diutamakan berbanding jenis yang kurang spesifik.
Penapisan Argumen Null: Yang penting, kaedah dengan parameter tidak boleh dibatalkan dihapuskan apabila argumen nol dibekalkan.
Penyelesaian Kekaburan: Jika berbilang kaedah yang sama khusus kekal, ralat kekaburan masa kompilasi berlaku.
Contoh Ilustrasi:
Mari kita periksa kelas EffectOptions
dengan beberapa pembina yang terlebih beban:
<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>
Menyebut EffectOptions options = new EffectOptions(null);
membawa kepada perkara berikut:
int
dan Point
diketepikan serta-merta kerana null
tidak boleh diserahkan kepada jenis yang tidak boleh dibatalkan ini.object[]
, IEnumerable<object>
, string
dan object
.object
dan IEnumerable<object>
.object[]
dan string
kekal, menunjukkan kekaburan, mengakibatkan ralat pengkompil.Ringkasnya, resolusi lebihan kaedah C# secara sistematik mengendalikan hujah nol dengan mengenal pasti kaedah yang berkenaan dan kemudian menapis yang tidak serasi dengan nilai nol berdasarkan jenis parameter. Kekaburan timbul apabila beberapa kaedah yang sama sesuai kekal selepas proses penapisan ini.
Atas ialah kandungan terperinci Bagaimanakah Resolusi Overload Kaedah Mengendalikan Nilai Null dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!