只读通用集合接口

时间:2013-01-12 01:26:53

标签: c# collections

好的,我一直在努力寻找做只读通用集合接口的最佳方法,这就是我想出的:

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;

接口并不理想,因为你仍然需要使用'Object'而不是实际的类型,但我认为这是尽可能接近你没有编译时只有泛型。如果你们看到任何巨大的问题或缺点,我绝对会感激...

0 个答案:

没有答案