Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace _15._03
- {
- enum Frequency { Weekly, Monthly, Yearly }//определяю тип Frequency
- public class Article : IRateAndCopy//класс, который имеет свойство с доступом для чтения и записи
- {
- public Article(string name, double rating, Person author)//конструктор с параметрами
- {
- Name = name;
- Rating = rating;
- Author = author;
- }
- public Article()//конструктор без параметров
- : this("Без названия", 0, new Person("Нет автора"))
- {
- }
- public string Name { get; set; }//свойства для чтения и записи
- public double Rating { get; set; }
- public Person Author { get; set; }
- public override string ToString()//перегруженная версия ToString
- => $"${Name} с рейтингом ${Rating} от {Author}";
- public virtual object DeepCopy()
- {
- Article temp = (Article)this.MemberwiseClone();
- temp.Name = this.Name;
- temp.Rating = this.Rating;
- temp.Author = (Person)this.Author.DeepCopy();
- return temp;
- }
- //string IRateAndCopy.Rating { get => Name; }
- //public Person(string name) => this.Name = name;
- }
- interface IRateAndCopy
- {
- double Rating { get; }
- object DeepCopy();
- }
- public class Person
- {
- public Person(string name)
- {
- Name = name;
- }
- public string Name { get; set; }
- public override bool Equals(object? obj)
- {
- // если параметр метода представляет тип Person
- // то возвращаем true, если имена совпадают
- if (obj is Person person) return Name == person.Name;
- return false;
- }
- public override int GetHashCode() => Name.GetHashCode();
- public virtual object DeepCopy()
- {
- Person temp = (Person) this.MemberwiseClone();
- temp.Name = this.Name;
- return temp;
- }
- // public override bool Equals(object obj)
- // {
- // if (obj == this)
- // return true;
- // return false;
- // }
- // public static bool operator ==(Person obj,Person obj1)
- // {
- // if(obj.Name==obj1.Name)
- // return true;
- // return false;
- // }
- // public static bool operator !=(Person obj, Person obj1)
- // {
- // if (obj.Name != obj1.Name)
- // return true;
- // return false;
- // }
- }
- class Edition
- {
- protected string Name { get; set; }
- protected DateTime date_of_publish { get; set; }
- protected int ID
- {
- get
- {
- return ID;
- }
- set
- {
- ID = value;
- }
- }
- public Edition(string name, DateTime date, int id)
- {
- Name = name;
- date_of_publish = date;
- ID = id;
- }
- public Edition()
- {
- }
- //public string Name
- //{
- // get => Name;
- // set => Name = value;
- //}
- //public DateTime PublishDate
- //{
- // get => publishDate;
- // set => publishDate = value;
- //}
- // public virtual string ToShortString()//виртуальный метод toShortString
- // => $"Name = {Name}"//для формирования строки без списка статей но со значением среднего рейтинга статей
- // + $"\nPublishDate = {PublishDate}";
- // + $"\nEdition = {Edition}";
- }
- class Magazine
- {
- private string name;
- private Frequency frequency;
- private DateTime publishDate;
- private int edition;
- private Article[] articles;
- public Magazine(
- string name,
- Frequency frequency,
- DateTime publishDate,
- int edition)//конструктор для инициализации соотв-х полей класса
- {
- this.name = name;
- this.frequency = frequency;
- this.publishDate = publishDate;
- this.edition = edition;
- }
- public Magazine()//конструткор без параметров ,иницал-й по умолчанию
- {
- }
- public string Name//свойство типа string
- {
- get => name;
- set => name = value;
- }
- public Frequency Frequency
- {
- get => frequency;
- set => frequency = value;
- }
- public DateTime PublishDate
- {
- get => publishDate;
- set => publishDate = value;
- }
- public int Edition
- {
- get => edition;
- set => edition = value;
- }
- public Article[] Articles
- {
- get => articles;
- set => articles = value;
- }
- /* public double GetAvgRating()
- {
- get {
- double result = 0;
- int count = 0;
- foreach (var item in Articles)
- {
- result += item.Rating;
- count++;
- }
- result /= count;
- if (count != 0) return result;
- else return 0;
- }
- }*/
- public bool this[Frequency frequency]//индексатор булевского типа,true если значение поля равно индексу
- {
- get => Frequency == frequency;
- }
- public void AddArticles(params Article[] newArticles)//метод для добававления элементов в список статей в журнале
- {
- if (newArticles?.Length == 0)
- {
- return;
- }
- if (articles == null)
- {
- articles = Array.Empty<Article>();
- }
- int oldLength = articles.Length;
- Array.Resize(ref articles, articles.Length + newArticles.Length);
- Array.Copy(newArticles, 0, articles, oldLength, newArticles.Length);
- }
- public override string ToString()//перегруженная версия для формирования строки со значениями всех полей класса сос писокм статей
- {
- StringBuilder stroka = new StringBuilder();
- foreach (var strk in Articles)
- {
- stroka.Append($"{strk}");
- }
- return string.Format("\nName: {0}\nFrequency: {1}\nPublishDate: {2, 7} \nEdition: {3, 6}\n\nArticles: {4}", name, Frequency, PublishDate, Edition, stroka);
- }
- public virtual string ToShortString()//виртуальный метод toShortString
- => $"Name = {Name}"//для формирования строки без списка статей но со значением среднего рейтинга статей
- + $"\nFrequency = {Frequency}"
- + $"\nPublishDate = {PublishDate}"
- + $"\nEdition = {Edition}";
- // + $"\nAvg rating = {GetAvgRating()}";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement