注:これは似ていますが、この他の質問とはまったく同じではありません
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>
キャストする必要がまったくない4番目のオプションはありますか?必要な変更を加えることができますIBusinessCollection<T>