【发布时间】:2010-12-05 20:45:33
【问题描述】:
注意:这与this other question类似,但不完全相同
我已经实现了一个IBusinessCollection 接口。它来自ICollection<T> 和旧的非通用ICollection。我宁愿只转储旧的破坏ICollection,但我正在使用带有CollectionView的WPF数据绑定,它希望我实现旧的破坏非泛型IList :-(
反正界面是这样的:
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }
public interface ICollection<T>
{ int Count { get; } }
public interface ICollection
{ int Count { get; } }
由于使用依赖注入,我使用它们的接口传递IBusinessCollection<T> 类型的对象,不是具体类型,所以我有这样的东西:
internal class AnonymousCollection : IBusinessCollection<string>
{
public int Count { get { return 5; } }
}
public class Factory
{
public static IBusinessCollection<string> Get()
{ return new AnonymousCollection(); }
}
当我尝试调用此代码时,出现错误,如下所示:
var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'
有 3 种方法可以编译,但都很难看。
将类转换为具体实现(我可能不知道)
将类显式转换为
ICollection将类显式转换为
ICollection<T>
是否有第四个选项根本不需要我施放东西?我可以对IBusinessCollection<T>进行任何我需要的更改@
【问题讨论】:
-
为什么不显式地实现这两个接口,直接实现通用接口呢?它仍然可以从外部“针对接口进行编程,而不是针对实现进行编程”。
标签: c# generics icollection