C# 方法重載解決方案:導航空參數
當多個方法共用名稱但簽章不同時,C# 的方法重載解析機制決定呼叫哪個方法。 在處理空參數時,這個過程特別有趣。
解過程:
可存取方法:系統最初識別與呼叫相符的所有可存取方法。
不適用的方法:如果方法的參數無法從提供的參數隱式轉換,則方法將被丟棄。
params
參數處理: 如果基於 params
的方法在其擴展形式和未擴展形式中均適用,則擴展版本將被忽略。
最佳配對選擇: 剩餘的適用方法將被評估為「最佳配對」。 更具體的類型優於不太具體的類型。
空參數過濾:至關重要的是,當提供空參數時,具有不可空參數的方法將被消除。
歧義解決:如果保留多個同樣具體的方法,則會發生編譯時歧義錯誤。
範例:
讓我們檢查一下帶有幾個重載建構子的 EffectOptions
類別:
<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>
呼叫 EffectOptions options = new EffectOptions(null);
會導致以下結果:
int
不可指派給這些不可空型,因此 Point
和 null
建構函式立即被排除。 object[]
、IEnumerable<object>
、string
和 object
。 object
和 IEnumerable<object>
。 object[]
和 string
保留,表示不明確,導致編譯器錯誤。 綜上所述,C# 的方法重載解析系統地處理空參數,首先識別適用的方法,然後根據參數類型過濾掉與空值不相容的方法。 當這個過濾過程之後剩下多個同樣適當的方法時,就會出現歧義。
以上是C# 中方法重載解析如何處理空值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!