【问题标题】:Ways to achieve constraint for a T parameter in interface to specific delegate type在特定委托类型的接口中实现 T 参数约束的方法
【发布时间】:2021-11-13 00:59:42
【问题描述】:

我知道从 C#7.3 开始,我们可以使用 T : Delegate 约束。 我们能否更具体一点 - 对我们的接口所依赖的特定方法签名的约束(我知道代码合同等参数,但如果我们必须这样做) 类似的东西?

public delegate int SummingDelegate(int a, int b);

public interface IRelyOn<T> where T : SummingDelegate
{
    int ConsumingSum(T summingMethod);
}

编辑: 我的场景是从一个可以模拟和测试的接口强制类使用某种类型的必要方法签名。

【问题讨论】:

  • 你不能只使用int ConsumingSum(Func&lt;int, int, int&gt; summingMethod)吗?当泛型不能是其他任何东西时,将其限制为没有太大意义,所以我认为您所追求的不可能
  • @CamiloTerevinto 感谢您的回复。我现在同意这没有太大意义。经过一番研究,这实际上是不可能的,因为委托是密封类(我现在很明显)不能用作约束语句的基类。

标签: c# delegates


【解决方案1】:

在这种情况下,泛型是不必要的,其中委托已经表示具有匹配参数列表和返回类型的任何方法。直接使用委托即可:

public delegate int SummingDelegate(int a, int b);

public interface IRelyOn
{
    int ConsumingSum(SummingDelegate summingMethod);
}

【讨论】:

  • 正是如此。 T : SomeType 仅在 T 可以是 SomeType 或其子类型时才有意义。并且委托不能有子类型(因为您不能从具体委托“继承”)。
猜你喜欢
  • 1970-01-01
  • 2011-09-07
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多