Содержание
Задача: создать абстрактный класс «Издание» (Edition
) с методами позволяющим вывести на экран информацию об издании, а также определить является ли данное издание искомым. Создать производные классы:
- Книга (
Book
) — название, фамилия автора, год издания, издательство, - Статья (
Article
) — название, фамилия автора, название журнала, его номер и год издания, - Электронный ресурс (
Ebook
) — название, фамилия автора, ссылка, аннотация
со своими методами вывода информации на экран.
Создать каталог (массив) из n
изданий, вывести полную информацию из каталога, а также организовать поиск изданий по фамилии автора
Решение лабораторной работы
Во-первых, стоит напомнить о том, что из себя представляются абстрактные классы в C#. Абстрактный класс в C# — это класс, экземпляры которого нельзя создавать напрямую. Теперь посмотрим на то, какие классы, в принципе, нам необходимо создать (исключая абстрактный). Во всех трех классах повторяются два свойства — название и фамилия автора. Соответственно, эти свойства мы можем вынести в абстрактный класс. Более того, когда мы начнем работу с каталогом изданий, то поиск мы будем осуществлять именно по фамилии автора.
Абстрактный класс Edition
Следую «правилам хорошего тона», создадим класс Edition
в отдельном файле с названием, совпадающем с названием класса:
public abstract class Edition { public string Author { get; set; } public string Name { get; set; } public virtual string Display() { return $"Автор {Author} Название: \"{Name}\""; } public bool IsThisEdition(string author) { return Author.Equals(author, StringComparison.OrdinalIgnoreCase); } }
Класс содержит два публичных свойства: Author
(фамилия автора) и Name
(название).
Метод Display
возвращает строку, содержащую основную информацию об издании. Так как все наследники нашего класса должны будут определять свои методы вывода информации на экран, то метод определен как виртуальный, а наследники будут этот метод переопределять.
Метод IsThisEdition
проверяет является ли издание искомым и возвращает true
, если фамилия автора издания совпадает со строкой author. Так как фамилия автора будет присутствовать во всех наследниках класса Edition
и по условиям задачи нам не требуется создавать для каждого класса свой метод поиска, то метод IsThisEdition
не требуется делать виртуальным. При этом, отдельно стоит отметить, что проверка строк в этом методе осуществляется без учёта регистра, то есть строки «Пупкин» и «пУпКиН» будут определяться программой как эквивалентные (равные).
Производные классы (Book
, Article
и Ebook
)
По условиям задачи, эти классы должны реализовывать свои методы вывода на экран информации. Каждый класс также поместим в отдельный файл. Ниже представлен код классов:
Файл Book.cs
public class Book: Edition { public int Year { get; set; }//год издания public string Publisher { get; set; }//издательство public override string Display() { return $"Книга {base.Display()} Год издания {Year} Издательство \"{Publisher}\""; } }
Файл Article.cs
public class Article: Edition { public string Journal { get; set; }//название журнала public int Number { get; set; }//его номер public int Year { get; set; }//год издания public override string Display() { return $"Статья {base.Display()} Журнал \"{Journal}\" #{Number} Год издания {Year}"; } }
Файл Ebook.cs
public class Ebook: Edition { public string Href { get; set; }//ссылка public string Annotation { get; set; }//аннотация public override string Display() { return $"Электронный ресурс {base.Display()} Аннотация {Annotation} Ссылка {Href}"; } }
Обратите внимание, что в каждом классе переопределен метод Display
и, при этом, в методе используется метод Display
базового класса Edition
.
Код основной программы
Здесь мы должны создать каталог (массив) различных изданий и провести в нем поиск по фамилии автора.
using System; namespace ConsoleApp2 { internal class Program { static void Main(string[] args) { Edition[] editions = new Edition[] { new Book() { Year = 1992, Publisher = "Cуперкнига", Author = "Пупкин", Name = "К вопросу о лабораторных работах по C#" }, new Article() { Year = 2022, Author = "Иванов", Name = "Статья по C#", Journal = "Программирование в C#", Number = 11 }, new Ebook() { Annotation = "В этой статье разрабатывается абстрактный класс", Author = "Vlad", Name = "Лабораторная работа по C#. Абстрактные классы", Href = "https://csharp.webdelphi.ru" }, new Book() { Year = 2001, Publisher = "Cуперкнига", Author = "Пупкин", Name = "Лучшая книга по C#" } }; Console.WriteLine(""); Console.WriteLine("Создеражиние каталога изданий"); foreach (Edition edition in editions) { Console.WriteLine(edition.Display()); } Console.WriteLine(""); Console.WriteLine("Введите фамилию автора издания которого необходимо найти"); string author = Console.ReadLine(); Console.WriteLine($"Результаты поиска по автору {author}"); foreach (Edition edition in editions) { if (edition.IsThisEdition(author)) { Console.WriteLine(edition.Display()); } } } } }
Здесь мы создали массив Edition[]
в который включили четыре элемента — две книги, одну статью и один электронный ресурс. Так как все издания у нас имею общего предка (родителя) — Edition
, то такой код вполне нормально скомпилируется и запустится.
Далее мы выводим этот массив на экран, используя методы Display()
, просим пользователя ввести фамилию автора и проводим поиск по каталогу, выводя при этом на экран все найденные издания. Для работы с каталогом мы используем цикл foreach
.
Протестируем работу программы, попытавшись найти все издания автора, используя строку для поиска «пупКИН». Вот результат работы программы:
Книга Автор Пупкин Название: «К вопросу о лабораторных работах по C#» Год издания 1992 Издательство «Cуперкнига»
Статья Автор Иванов Название: «Статья по C#» Журнал «Программирование в C#» #11 Год издания 2022
Электронный ресурс Автор Vlad Название: «Лабораторная работа по C#. Абстрактные классы» Аннотация В этой статье разрабатывается абстрактный класс Ссылка https://csharp.webdelphi.ru
Книга Автор Пупкин Название: «Лучшая книга по C#» Год издания 2001 Издательство «Cуперкнига»
Введите фамилию автора издания которого необходимо найти
пупКИН
Результаты поиска по автору пупКИН
Книга Автор Пупкин Название: «К вопросу о лабораторных работах по C#» Год издания 1992 Издательство «Cуперкнига»
Книга Автор Пупкин Название: «Лучшая книга по C#» Год издания 2001 Издательство «Cуперкнига»
Требуемый результат достигнут.
Содержимое проекта лабораторной работы
После выполнения работы у вас должен получиться проект с содержимым как показано на рисунке:
Каждый файл содержит отдельный класс, рассмотренный выше.
Итого
Для выполнения этой лабораторной работы нам потребовалось вспомнить/изучить следующую информацию по C#: абстрактный класс, циклы в C#, наследование классов, переопределение методов в C#.