首页 >后端开发 >C++ >C# 泛型约束可以指定具有特定参数类型的构造函数吗?

C# 泛型约束可以指定具有特定参数类型的构造函数吗?

Susan Sarandon
Susan Sarandon原创
2025-01-14 16:12:44232浏览

Can C# Generic Constraints Specify Constructors with Specific Parameter Types?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn