using System; using System.Collections.Generic; namespace Swan.Collections { /// /// Represents a collection of components. /// Each component in the collection may be given a unique name for later retrieval. /// /// The type of components in the collection. public interface IComponentCollection : IReadOnlyList { /// /// Gets an interface representing the named components. /// /// /// The named components. /// IReadOnlyDictionary Named { get; } /// /// Gets an interface representing all components /// associated with safe names. /// The safe name of a component is never . /// If a component's unique name if , its safe name /// will be some non- string somehow identifying it. /// Note that safe names are not necessarily unique. /// /// /// A list of s, each containing a safe name and a component. /// IReadOnlyList<(string SafeName, T Component)> WithSafeNames { get; } /// /// Gets the component with the specified name. /// /// /// The component. /// /// The name. /// The component with the specified . /// is null. /// The property is retrieved and is not found. T this[string name] { get; } /// /// Adds a component to the collection, /// giving it the specified if it is not . /// /// The name given to the module, or . /// The component. void Add(string name, T component); } }