实现接口泛型函数
本文关键字:函数 泛型 接口 实现 | 更新日期: 2023-09-27 18:08:43
我的服务中有这个函数,它使用泛型类型,所以我不必在这个项目中引用另一个项目。
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
的所有用户,以说明它现在是泛型类型。