Advertisement
Guest User

Untitled

a guest
Dec 18th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.02 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace prSharp
  5. {
  6.     //Базовый класс
  7.     public class Person{
  8.         //делаем защищенное поле, чтобы можно было иметь доступ из потомков
  9.         protected readonly string _name;
  10.         public Person(string name)
  11.         {
  12.             _name = name;
  13.         }
  14.  
  15.         //метод базового класса который будем переопределять
  16.         // пусть возвращает словарь где ключ - название свойства
  17.         // значение - само свойства объекта
  18.         public virtual Dictionary<string,string> GetData()
  19.         {
  20.             return new Dictionary<string, string>()
  21.             {
  22.                 {"Name", _name}
  23.             };
  24.         }
  25.     }
  26.  
  27.     //дочерний класс сотрудника, он содержит в себе информацию о компании
  28.     public class Employee : Person
  29.     {
  30.         private readonly string _companyName;
  31.         public Employee(string name, string comppanyName) : base(name)
  32.         {
  33.             _companyName = comppanyName;
  34.         }
  35.         public override Dictionary<string, string> GetData()
  36.         {
  37.             //тут мы вызвали базовую реализацию
  38.             var data = base.GetData();
  39.             data.Add("Company", _companyName);
  40.             return data;
  41.         }
  42.     }
  43.  
  44.     // допустим у тебя задача - вывести инофрмацию о людях
  45.     // это могут быть как обычные люди, так и сотрудники
  46.     public class PersonInfoPresenter
  47.     {
  48.         private readonly Person[] _people;
  49.         public PersonInfoPresenter(Person[] people)
  50.         {
  51.             //кидаем исключение если передан null
  52.             _people = people??throw new ArgumentNullException(nameof(people));
  53.         }
  54.  
  55.         public void DrawPeopleInfo()
  56.         {
  57.             for(int i = 0; i<_people.Length; i++)
  58.             {
  59.                 //Вот тут мы не знаем кто это, сотрудник или обычный человек
  60.                 Person person = _people[i];
  61.                 //но мы знаем что метод GetData - должен вернуть словарь с данными
  62.                 //допустим мы договорились что ключ - имя какого-то свойства
  63.                 //а значение - значение этого свойства
  64.                 foreach(var data in _people[i].GetData())
  65.                 {
  66.                     Console.WriteLine(data.Key + " : " + data.Value);
  67.                 }
  68.                 //чтобы был промежуток между сотрудниками
  69.                 Console.WriteLine();
  70.             }
  71.         }
  72.     }
  73.  
  74.  
  75.     class Program
  76.     {
  77.         //вот наши данные, они содержат как сотрудников, так и обычных Person
  78.         static Person[] people = new[]{
  79.             new Person("Иван Петрович Смирнов"),            
  80.             new Person("Варвара Ивановна Панасенкова"),
  81.             new Employee("Бил, мать его в сраку, Гейтс", "Майкрософт"),
  82.             new Employee("Ричард Мэттью Столлман", "Временно безработный"),            
  83.             new Person("Анна Петровна"),
  84.            
  85.         };
  86.  
  87.         public static void Main()
  88.         {
  89.             //мы создали наш презентер, который схавал людей
  90.             PersonInfoPresenter presenter = new PersonInfoPresenter(people);
  91.             //вызвали метод для того чтобы он отрисовал людей которых схавал
  92.             presenter.DrawPeopleInfo();
  93.         }
  94.  
  95.     }
  96. }
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement