Класс домашняя библиотека. Перегрузка операций в классах

Описать класс домашняя библиотека. Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку, добавление книг в библиотеку, удаления книг из нее, доступа к книге по номеру.
1 ответ

Класс
class Book : IEquatable<Book>
{
    public readonly string Author, Name;
    private Book() { }
    public Book(string Author, string Name) 
    { 
        this.Author = Author; 
        this.Name = Name; 
    }
 
    public bool  Equals(Book other)
    {
        return this.Author.Equals(other.Author) && this.Name.Equals(other.Name);
    }
 
    public override string ToString()
    {
        return string.Format("{0}, {1}", this.Author, this.Name);
    }
}
 
class Library : ICollection<Book>
{
    List<Book> books = new List<Book>();
 
    public Book this[int index]
    {
        get { return books[index]; }
    }
 
    public IEnumerable<Book> GetBooksByAuthor(string Author)
    {
        foreach (Book book in books)
        {
            if (book.Author.Equals(Author))
                yield return book;
        }
    }
 
    public IEnumerable<Book> GetBooksByName(string Name)
    {
        foreach (Book book in books)
        {
            if (book.Author.Equals(Name))
                yield return book;
        }
    }
    
    public void Add(Book book)
    {
        books.Add(book);
    }
 
    public void Clear()
    {
        books.Clear();
    }
 
    public bool Contains(Book book)
    {
        return books.Contains(book);
    }
 
    public void CopyTo(Book[] array, int **********)
    {
        books.CopyTo(array, **********);
    }
 
    public int Count
    {
        get { return books.Count; }
    }
 
    public bool IsReadOnly
    {
        get { return false; }
    }
 
    public bool Remove(Book book)
    {
        return books.Remove(book);
    }
 
    public IEnumerator<Book> GetEnumerator()
    {
        return books.GetEnumerator();
    }
 
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}
Пример использования
static void Main()
{
    Library lib = new Library();
    lib.Add(new Book("A", "B"));
    lib.Add(new Book("A", "C"));
    lib.Add(new Book("A", "D"));
    lib.Add(new Book("B", "B"));
    lib.Add(new Book("B", "E"));
    lib.Add(new Book("B", "C"));
 
    //вывод всех книг из библиотеки
    foreach (Book book in lib)
        Console.WriteLine(book);
    Console.WriteLine("\n-------------------------");
 
    //вывод всех книг за авторством А
    foreach (Book book in lib.GetBooksByAuthor("A"))
        Console.WriteLine(book);
    Console.WriteLine("\n-------------------------");
 
    //четвертая книга в библиотеке
    Console.WriteLine(lib[3]);
    Console.Read();
}