Создайте класс пользователя социальной сети с минимальным набором данных (ФИО, дата рождения) - C#
Формулировка задачи:
Задание.
1. Социальная сеть. Создайте класс пользователя социальной сети с минимальным набором данных (ФИО, дата рождения). Каждый пользователь может публиковать запись (простой вывод сообщения на консоль). Необходимо реализовать механизм подписки одних пользователей на публикации других. Самих пользователей можно создать непосредственно в исходном коде. При запуске программа ждет от вас ввода одной из команд:
1. Подписка (или отписка) пользователей. При этом необходимо указать пользователя подписчика и пользователя, на которого происходит подписка.
2. Публикация записи пользователем (с указанием пользователя и сообщения).
Подписанные пользователи должны реагировать на публикации выставлением оценок (выбранных случайным образом). При этом оценка выводится в консоль с указанием оценивающего, оцениваемого сообщения и самой оценки.
Вот такое вот задание. Делегаты и события надо использовать. Хотя я не понимаю что это такое. Если кто сможет написать такой код пож с объяснениями если можно. или по скайпу)
Решение задачи: «Создайте класс пользователя социальной сети с минимальным набором данных (ФИО, дата рождения)»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Threading; namespace ConsoleApplication { internal class Program { private static void Main() { var users = new List<User> { new User("Сергей", new DateTime(1986, 5, 8)), new User("Игорь", new DateTime(1998, 3, 5)), new User("Андрей", new DateTime(1990, 10, 10)) }; users[1].Subscribe(users[0]); users[2].Subscribe(users[0]); users[0].Publish("Some message"); users.ForEach(user => user.Dispose()); Console.ReadKey(true); } } internal sealed class User : IDisposable { private static readonly Random Randomizer = new Random(); // Коллекция для того, чтобы память под события не убегала. // Как альтернатива: менеджер на пользователем, который сам освобождает память; // или Weak Event. private readonly IList<Action<User, string>> subscriptions = new List<Action<User, string>>(); public User(string name, DateTime birthday) { this.Name = name; this.Birthday = birthday; } public string Name { get; private set; } public DateTime Birthday { get; private set; } private event Action<User, string> onPublished; public event Action<User, string> OnPublished { add { this.subscriptions.Add(value); this.onPublished += value; } remove { this.subscriptions.Remove(value); this.onPublished -= value; } } public void Dispose() { foreach (Action<User, string> subscription in this.subscriptions) { this.onPublished -= subscription; } this.subscriptions.Clear(); } public void Publish(string message) { Console.WriteLine("{0}: {1}", this.Name, message); // Вся эта шайтан-магия для потокобезопасности, обычно в виде метода расширения делается. object obj = this.onPublished; var action = Thread.VolatileRead(ref obj) as Action<User, string>; if (action != null) { action(this, message); } } public void Subscribe(User user) { user.OnPublished += this.Rate; } public void Unsubscribe(User user) { user.OnPublished -= this.Rate; } private void Rate(User user, string message) { int mark = Randomizer.Next(5) + 1; Console.WriteLine("{0} rated at {1}: '{2}' by {3}.", this.Name, mark, message, user.Name); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д