```csharp
// Book.cs
using System;
namespace SimpleInterfaces;
public class Book : IComparable<Book>
{
public string Title { get; set; } = string.Empty;
public string Author { get; set; } = string.Empty;
public int Year { get; set; }
public Book(string title, string author, int year)
{
Title = title;
Author = author;
Year = year;
}
public int CompareTo(Book? other)
{
if (other is null) return 1;
return Year.CompareTo(other.Year);
}
public override string ToString() => $"{Title} — {Author} ({Year})";
}
```
```csharp
// Library.cs
using System.Collections;
using System.Collections.Generic;
namespace SimpleInterfaces;
public class Library : IEnumerable<Book>
{
private readonly List<Book> _books = new();
public void Add(Book book) => _books.Add(book);
public IEnumerator<Book> GetEnumerator() => _books.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
```
```csharp
// ReportWriter.cs
using System;
using System.IO;
namespace SimpleInterfaces;
public class ReportWriter : IDisposable
{
private readonly StreamWriter _writer;
private bool _disposed;
public ReportWriter(string filePath)
{
_writer = new StreamWriter(filePath);
Console.WriteLine($"Файл {filePath} открыт для записи.");
}
public void WriteLine(string text)
{
if (_disposed)
throw new ObjectDisposedException(nameof(ReportWriter));
_writer.WriteLine(text);
}
public void Dispose()
{
if (_disposed) return;
_writer.Dispose();
_disposed = true;
Console.WriteLine("Файл закрыт (ресурсы освобождены).");
GC.SuppressFinalize(this);
}
}
```
```csharp
// Program.cs
using System;
using System.Linq;
namespace SimpleInterfaces;
class Program
{
static void Main()
{
var books = new List<Book>
{
new Book("Война и мир", "Лев Толстой", 1869),
new Book("1984", "Джордж Оруэлл", 1949),
new Book("Мастер и Маргарита", "Михаил Булгаков", 1967),
new Book("Преступление и наказание", "Фёдор Достоевский", 1866)
};
books.Sort();
Console.WriteLine("Книги, отсортированные по году:");
foreach (var book in books)
Console.WriteLine($" {book}");
var library = new Library();
library.Add(new Book("Анна Каренина", "Лев Толстой", 1877));
library.Add(new Book("Идиот", "Фёдор Достоевский", 1869));
library.Add(new Book("Скотный двор", "Джордж Оруэлл", 1945));
Console.WriteLine("\nКниги из своей коллекции Library (foreach):");
foreach (var book in library)
Console.WriteLine($" {book}");
Console.WriteLine("\nLINQ: книги после 1900 года:");
var modern = library.Where(b => b.Year > 1900);
foreach (var book in modern)
Console.WriteLine($" {book}");
Console.WriteLine("\nЗапись отчёта в файл (IDisposable):");
using (var writer = new ReportWriter("report.txt"))
{
writer.WriteLine("Отчёт по библиотеке");
writer.WriteLine($"Всего книг: {library.Count()}");
foreach (var book in library)
writer.WriteLine(book.ToString());
}
}
}
```