c# - 使用另一种实现的 Baseproperty
问题描述
我有一个基类对话框:
public class Dialog<T> : IDialogAble<T> where T : class, IEntity
{
public IEntityService<T, int> Service { get; set; }
public async Task Suchen(Expression<Func<T, bool>> criteria)
{
Cursor = Cursors.Wait;
await Service.Search(criterian);
Cursor = Cursors.Arrow;
}
}
在这个类中,我有一个在基类和派生类中使用的服务。我在构造函数中设置了服务:
Service = serviceFactory.CreateEntityService<MyObject, int>(context);
现在我有一个对象,我的服务必须实现 short not int,因为数据库上的主键是 tinyint。所以像这样:
Service = serviceFactory.CreateEntityService<MyObject, short>(context);
但这不起作用,因为在这种情况下 short 不能转换为 int 。问题是,这Dialog<T>
不能更改为Dialog<T, TKey>
. 我尝试使用 new 修饰符,但这不起作用,因为我在基类中使用了该服务:
public new IEntityService<OtherObject, short> Service { get; set; }
我没有找到解决方案,也许有人有想法。
解决方案
如果 的泛型参数IEntityService
是协变的,则可以使用IEntityService<T, object>
.
您的课程将如下所示:
public class Dialog<T> : IDialogAble<T> where T : class, IEntity
{
public IEntityService<T, object> Service { get; set; }
public async Task Suchen(Expression<Func<T, bool>> criteria)
{
Cursor = Cursors.Wait;
await Service.Search(criterian);
Cursor = Cursors.Arrow;
}
}
你仍然可以Service
这样设置:
Service = serviceFactory.CreateEntityService<MyObject, int>(context);
推荐阅读
- python - 转置数据框问题:为每个 df.index 和 df.column 组合在新数据框中创建一行
- java - 我的SQL命令有问题,请大家帮帮我?
- python - 在 PYOMO 中为 2 个变量定义一组特定的值
- javascript - 从 iframe CORS 获取点击数据
- javascript - 如果项目已更新,则从 v-select 更新 v-model
- excel - 简化并制作更高效的 Excel 公式
- python - 我可以展示不同的死刑方法并预测未来几年吗
- javascript - javascript递归函数在使用调试器时返回数据,但没有返回未定义
- php - 如何在 Laravel Passport 令牌中添加自定义数据?
- reactjs - redux devtools 未显示状态