約束與重載
在 C# 中,可以將泛型限制應用於型別參數,以限制可使用的型別。然而,當對參數施加約束時,它會影響重載解析過程。
考慮以下程式碼:
static void Foo<T>(T a) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2
這兩個函數重載Foo 並根據可空性進行區分但是,嘗試添加對類別類型進行約束的第三個重載會失敗:
static void Foo<T>(T a) where T : class { } // 3
這是因為函數的參數與Foo
class RequireStruct<T> where T : struct { } class RequireClass<T> where T : class { } static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2 static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
現在,可以重載Foo 來處理所有三種情況:
以上是泛型約束可為空性如何影響 C# 方法重載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!