我有一个代码库,我想用于ASP.NET MVC和WPF/MVVM前端。业务对象作为接口实现,业务逻辑使用这些接口传递数据。在接口中实现接口属性?
说我有我的接口上实现IEnumerable属性。是否有可能让此接口的不同版本使用IEnumerable的不同实现?我试图完成的一个例子:
class Reporting
{
public bool RunReport(IReportParams Params);
}
interface IReportParams
{
IEnumerable<Guid> SelectedItems { get; }
IEnumerable<StatusEnum> SelectedStatuses { get; }
}
class MvcReportParams : IReportParams
{
public List<Guid> SelectedItems { get; set; }
public List<StatusEnum> SelectedStatuses { get; set; }
}
class WpfReportParams : IReportParams
{
public ObservableCollection<Guid> SelectedItems { get; set; }
public ObservableCollection<StatusEnum> SelectedStatuses { get; set; }
}
可以这样做吗?
编辑:我也应该问“怎么了”,因为当我尝试,我得到类似的错误:
“MvcReportParams”不实现接口成员“IReportParams.SelectedStatuses”。 “MvcReportParams.SelectedStatuses”无法实现“IReportParams.SelectedStatuses”,因为它不具备“System.Collections.Generic.IEnumerable”
的ObservableCollection匹配的返回类型和列表两种完全实现IEnumerable,因此这似乎不是不对我有意义。
最后编辑
嗯,有人贴出了答案,但他们删除它由于某种原因,所以我不能将其标记为解决方案。这是我最终做的:
interface IReportParams
{
IEnumerable<Guid> SelectedItems { get; }
IEnumerable<StatusEnum> SelectedStatuses { get; }
}
class MvcReportParams : IReportParams
{
// Properties that the modelbinder dims and sets up
public List<Guid> SelectedItems { get; set; }
public List<StatusEnum> SelectedStatuses { get; set; }
// Explicityly implement my interface
IEnumerable<Guid> IReportParams.SelectedItems
{
get { return SelectedItems; }
}
IEnumerable<StatusEnum> IReportParams.SelectedStatuses
{
get { return SelectedStatuses; }
}
}
class WpfReportParams : IReportParams
{
// Properties that my view dims and modifies
public ObservableCollection<Guid> SelectedItems { get; set; }
public ObservableCollection<StatusEnum> SelectedStatuses { get; set; }
// Explicityly implement my interface
IEnumerable<Guid> IReportParams.SelectedItems
{
get { return SelectedItems; }
}
IEnumerable<StatusEnum> IReportParams.SelectedStatuses
{
get { return SelectedStatuses; }
}
}
这是更多的样板代码行,但我喜欢更明确无论如何。
绝对。是。 – 2012-03-23 19:59:39
另外,你只需要尝试一下,而不是写一个关于它的问题就会更快。 – 2012-03-23 20:00:19
@Boo正是我要说的Boo。也许这更多的是关于理解它为什么起作用(或不起作用)的问题,而不管它是否工作,因为编译器会尽快告诉你,无论它的回答速度多快:) – dreza 2012-03-23 20:03:12