C#泛型构造函数及参数约束
C#中的泛型约束允许对类型参数指定条件。“new()”约束是常见的约束之一,它确保类型具有无参数构造函数。然而,某些情况下可能需要对构造函数参数进行更具体的约束。
问题:
能否指定一个泛型约束,要求存在具有特定参数类型的构造函数?例如,能否将泛型类型T约束为具有接受“float[,]”参数的构造函数?
如下所示,直接尝试实现此类约束将导致编译失败:
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new(float[,] u) { return new T(new float[0, 0]); } }</code>
答案:
不幸的是,无法在C#中直接指定此类约束。但是,可以使用一种变通方法。
变通方法:
一种常见的变通方法是提供一个委托,该委托可以使用指定的参数创建所需类型的对象。然后,可以将此委托作为参数传递给泛型方法。
<code class="language-csharp">public class A { public static void Method<T>(T a, Func<float[,], T> creator) { // ... 执行某些操作 ... } }</code>
这种方法允许灵活地指定构造函数参数,因为可以自定义委托以使用特定值实例化对象。
以上是C# 泛型约束可以指定具有特定参数类型的构造函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!