注意:这与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'
有三种方法可以进行编译,但所有这些方法都很难看。
将类强制转换为具体实现(我可能不知道)
将班级明确地投放到ICollection
将班级明确地投放到ICollection<T>
是否有第四种选择,根本不需要我施展东西?我可以对IBusinessCollection<T>
答案 0 :(得分:10)
这似乎解决了我的快速测试中的问题。
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{
new int Count { get; }
}
答案 1 :(得分:-1)
ICollection<string> counter = Factory.Get();
counter.Count; // No longer ambiguous