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中文网其他相关文章!