1

わかりました。私は読み取り専用のジェネリックコレクションインターフェイスを実行するための最良の方法を見つけようとしてきました。これが私が思いついたものです。

public delegate Boolean EnumerateItemsDelegate<ItemType>(ItemType item);
public delegate Boolean EnumerateItemsDelegate(Object item);

public interface IReadOnlyObjectCollection<out ItemType>
{
    Boolean ContainsItem(Object item);
    Array CopyToArray();
    void EnumerateItems(EnumerateItemsDelegate enumerateItemsDelegate);

    UInt32 Count { get; }
    UInt32 Capacity { get; }
}

public interface IReadOnlyCollection<ItemType> : IReadOnlyObjectCollection<ItemType>
{
    Boolean ContainsItem(ItemType item);
    Array<ItemType> CopyToArray();
    void EnumerateItems(EnumerateItemsDelegate<ItemType> enumerateItemsDelegate);

    UInt32 Count { get; }
    UInt32 Capacity { get; }
}

これは、Microsoftコレクションインターフェイスの大きな問題を回避することを目的としています...派生した読み取り専用コレクションをベースコレクションに割り当てることができません。

IReadOnlyObjectCollection<String> s;
IReadOnlyObjectCollection<Object> o = s;

実際の型の代わりに「オブジェクト」を使用する必要があるため、インターフェイスは明らかに理想的ではありませんが、コンパイル時のジェネリックのみを使用せずに取得できる限り近いと思います。皆さんがこれに大きな問題や欠点を見つけたら、私は間違いなくありがたいです...

4

0 に答える 0