实现接口泛型函数



我的服务中有这个函数,它使用泛型类型,所以我不必在这个项目中引用另一个项目。

async Task<string> EagerLoadAllAsync<T>(
   params Expression<Func<T, object>>[] includeProperties) where T : class;

当我在具体类中实现这个时,我可以这样做(或类似的事情):

async Task<string> EagerLoadAllAsync<Lead>(
   params Expression<Func<Lead, object>>[] includeProperties);
这对我来说不太重要,我只是想知道?

不能,因为您的重写方法将无法处理所有可能的T。它只能在Lead上工作。

正如usr回答的那样,不,这是不可能的。

但是,根据您的具体需要,可能会以一种令人满意的方式满足您的需求。

现在,你的接口(我猜是一个抽象类,但这对这个答案的目的并不重要)被定义为

abstract class C {
  async Task<string> EagerLoadAllAsync<T>(
     params Expression<Func<T, object>>[] includeProperties) where T : class
  { ... }
}
相反,你的接口可以是泛型类型和非泛型方法:
abstract class C<T> where T : class {
  async Task<string> EagerLoadAllAsync(
     params Expression<Func<T, object>>[] includeProperties)
  { ... }
}

您的派生类将从C<Lead>而不是C派生。

但是,这确实需要修改C的所有用户,以说明它现在是泛型类型。

最新更新