C# 泛型:如果 T 是返回类型,它也可以为 void 吗?如何将这些接口组合在一起

本文关键字:在一起 组合 接口 void 如果 泛型 返回类型 也可以 | 更新日期: 2023-09-27 18:34:28

我有以下接口,它使用回调返回类型 T 的泛型参数...

public interface IDoWork<T>
{
    T DoWork();
}

但是我也有以下接口,但它不会调用回调,因为它返回 void。

public interface IDoWork
{
    void DoWork();
}

是否可以组合这两个接口并使用运行时逻辑来确定差异? 我该怎么做?

C# 泛型:如果 T 是返回类型,它也可以为 void 吗?如何将这些接口组合在一起

不幸的是,它们不能组合。

你可以在框架中看到这一点 - 这就是为什么有一个单独的TaskTask<T>类,例如。

话虽如此,您通常可以通过使用 IDoWork<object> 和传递值等null来共享此类方案中的实现。

返回类型是方法签名的一部分,所以 T DoWork(( 和 void DoWork(( 是不同的,void 不是一个类型,也不是一个null。这表明从方法返回时评估堆栈中没有任何内容。