C# 泛型型別:建構子參數限制
C# 允許將泛型方法限制為擁有無參數建構子的型別 (where T : new()
)。 但是,不支援直接指定具有特定參數類型的建構函數作為約束。
有效約束範例:
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new() { // ... some code ... return new T(); } }</code>
這正確地將 T
限制為具有預設建構子的類型。 但是,以下內容將導致編譯錯誤:
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new(float[,] u) { // ... some code ... return new T(new float[0, 0]); } }</code>
替代方法
要解決此限制,請利用委託提供接受所需參數類型的建構子:
<code class="language-csharp">public class A { public static void Method<T>(T a, Func<float[,], T> creator) { // ... some code ... T instance = creator(new float[0, 0]); // Create T using the supplied delegate } }</code>
這裡,creator
委託接收一個float[,]
並回傳一個T
實例。 然後 Method
函數使用該委託來建立物件。 這提供了指定建構函數參數的靈活性,而無需依賴直接約束機制。
以上是在 C# 中如何限制泛型型別具有特定的建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!