首頁 > 後端開發 > C++ > 泛型約束可為空性如何影響 C# 方法重載?

泛型約束可為空性如何影響 C# 方法重載?

Patricia Arquette
發布: 2024-12-30 05:06:09
原創
596 人瀏覽過

How Does Generic Constraint Nullability Affect C# Method Overloading?

約束與重載

在 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(T a) 的參數,其中T :結構。為了解決這個問題,我們必須將約束放在不同的參數上:

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 來處理所有三種情況:

  • 純值類型(例如int) 映射到Foo(T a, RequireStructignore = null),其中T : struct.
  • 可空值型別(例如int?)對應到Foo(T? a),其中T : struct.
  • 引用型別(例如string)對應到Foo(T a, RequireClassignore = null) 其中T :上課。

以上是泛型約束可為空性如何影響 C# 方法重載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板