在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>
此解决方案允许我们通过传入合适的委托来对构造函数施加更复杂的约束。
以上是除了无参数构造函数之外,C# 泛型构造函数可以强制执行特定参数类型吗?的详细内容。更多信息请关注PHP中文网其他相关文章!