У меня есть общая реализация коллекции для различных вещей, которые внутри:
public class ImageDocument
с такими свойствами, как:
.Objects
.Effects
.Layers
каждый из которых в основном IEnumerable<T>
, но у меня также есть отдельные вызовы, которые дают мне счетчик для каждого из них, что-то вроде:
GetNumObjects()
GetNumEffects()
GetNumLayers()
но это члены более низкого уровня, которые я хочу обернуть, а также реализовать вышеуказанные свойства (.Objects, .Effects, .Layers
) как IEnumerable<T>
, также используя элементы более низкого уровня, такие как:
GetObject (int index)
GetEffect (int index)
GetLayer (int index)
У меня есть собственный IEnumerable<T>
подобный интерфейс, который наследуется от IEnumerable<T>
.
В конце я хочу, чтобы эти свойства были такими:
ICountableEnumerable Objects
ICountableEnumerable Effects
ICountableEnumerable Layers
чтобы я мог их перечислять, получать доступ к их счетам (используя низкоуровневые функции), а также иметь возможность их индексировать:
myImageDocument.Objects.Count, etc.
myImageDocument.Objects[4]
foreach ... myImageDocument.Objects ...
Могу ли я реализовать их напрямую, как реализацию IEnumerable<T>
внутри ImageDocument
, например:
public IEnumerator<Objects> GetEnumerator()
{
foreach(...)
{
yield return obj;
}
}
или мне нужен промежуточный тип для каждого из этих свойств? Что-то вроде:
ObjectCollection
EffectCollection
LayerCollection
который реализует ICountableEnumerable
?