我有一個代碼庫,我想用於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