我的服务中有这个函数,它使用泛型类型,所以我不必在这个项目中引用另一个项目。
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);
对我来说无关紧要,我只是想知道?
答案 0 :(得分:4)
不,因为被覆盖的方法无法处理所有可能的T
。它只适用于Lead
。这会危及类型安全,是不允许的。
答案 1 :(得分:3)
正如我们回答的那样,不,不可能直接回答。
但是,根据您的具体需求,可能会以满足您需求的方式满足您的需求。
现在,您的界面(我猜是一个抽象类,但对于这个答案而言并不重要)被定义为
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
的所有用户,以解释它现在是通用类型的事实。