首页 > 后端开发 > C++ > 除了无参数构造函数之外,C# 泛型构造函数可以强制执行特定参数类型吗?

除了无参数构造函数之外,C# 泛型构造函数可以强制执行特定参数类型吗?

Mary-Kate Olsen
发布: 2025-01-14 15:52:43
原创
620 人浏览过

C#泛型构造函数能否强制指定参数类型?超越无参数构造函数的限制

在C#中,可以对泛型方法施加约束,以确保满足特定要求。一种常见的约束是指定泛型类型必须具有无参数构造函数。然而,一个自然的问题出现了:我们能否对构造函数施加更具体的约束?

案例:强制指定参数类型

让我们以问题中提供的示例为例,我们希望强制使用一个接受float[,]参数的构造函数。最初的尝试:

<code class="language-c#">public static T Method<T>(T a) where T : new(float[,] u) {
    //...do something...
    return new T(new float[0, 0]);
}</code>
登录后复制

编译失败,迫使我们寻找替代方案。

解决方法:自定义创建委托

为了规避此限制,我们采用了一种变通方法,即引入一个负责创建T类型实例的委托。此委托将必要的参数作为参数,并返回T的实例。

<code class="language-c#">public static void Method<T>(T a, Func<float[,], T> creator) {
    //...do something...
}</code>
登录后复制

修改我们的代码以使用此委托,结果如下:

<code class="language-c#">A.Method(float[,], instanceCreator);
Func<float[,], T> instanceCreator = (float[,] arr) => new T(arr);</code>
登录后复制

此解决方案允许我们通过传入合适的委托来对构造函数施加更复杂的约束。

Can C# Generic Constructors Enforce Specific Parameter Types Beyond Parameterless Constructors?

以上是除了无参数构造函数之外,C# 泛型构造函数可以强制执行特定参数类型吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板