Здравствуйте! Есть такая задача: Используя делегаты, события и таймер реализовать имитацию выпуска журналов
и газет различными издательствами и подписку на них различных личностей.
Должны присутствовать классы: Издательство, Подписчик. Каждый журнал/газета -
событие, в аргументах события - название и номер выпуска. Для задания
периодичности использовать таймер.
У меня получилось вызвать вызвать через делегат события по изданию газеты и журнала, а вот повторить тоже самое с использованием таймера не выходит, может кто подскажет?
Вот код на с#:
Код:
using System;
using System.Collections.Generic;
using System.Threading;
namespace MyMagazin
{
public class Message
{
public int Number { get; set; }
public string Name { get; private set; }
public Message(string name, int num)
{
Name = name;
Number = num;
}
}
public class Magazin
{
public int MagNumber { get; set; }
public string MagName { get; private set; }
readonly List<Magazin> _magazins = new List<Magazin>();
public void AddMagazin(Magazin newMagazin)
{
_magazins.Add(newMagazin);
}
public Magazin(string name, int num)
{
MagName = name;
MagNumber = num;
}
}
public class NewsPaper
{
public int NewNumber { get; set; }
public string NewName { get; private set; }
readonly List<NewsPaper> _newsPapers = new List<NewsPaper>();
public void AddNewsPaper(NewsPaper newsPaper)
{
_newsPapers.Add(newsPaper);
}
public NewsPaper(string name, int num)
{
NewName = name;
NewNumber = num;
}
}
public class Publisher
{
public string PubName { get; set; }
readonly List<Publisher> _publishers = new List<Publisher>();
public void AddPublisher(Publisher newPublisher)
{
_publishers.Add(newPublisher);
}
public delegate void Print(object sender, Message m);
public static event Print NewsPaper;
Timer _tNewsPaper;
public virtual void PrintNewsPaper(object state, string name)
{
var count = 0;
if (NewsPaper != null)
{
NewsPaper(this, new Message(name, count));
count++;
}
}
public event Print Magazin;
Timer _tMagazin = new Timer(PrintMagazin, null, 4000, 4000);
public Publisher(string name)
{
_tNewsPaper = new Timer(PrintNewsPaper, null, 0, 1000);
PubName = name;
}
public virtual void PrintMagazin(string name)
{
var count = 0;
if (Magazin != null)
{
Magazin(this, new Message(name, count));
count++;
}
}
}
public class Subscriber
{
readonly List<Subscriber> _subscribers = new List<Subscriber>();
public Subscriber(string name)
{
Name = name;
}
public void AddSubscriber(Subscriber newSubscriber)
{
_subscribers.Add(newSubscriber);
}
public static string Name { get ; set; }
public void ReceiveMail(object sender, Message m)
{
Console.WriteLine("{0} получил очередной выпуск {1}, №{2}", Name, m.Name, m.Number);
}
}
public static class Demo
{
public static void Main()
{
var newsPapers = new NewsPaper[] {new NewsPaper("Голос Украины", 1), new NewsPaper("Родина", 1)};
var magazins = new Magazin[] {new Magazin("Веселые картинки", 1), new Magazin("Мурзилка", 1)};
var publishers = new Publisher[] {new Publisher("Донбасс"), new Publisher("Новый мир")};
var subscribers = new Subscriber[] {new Subscriber("Василий"), new Subscriber("Иван")};
//Publisher.Magazin += sub1.ReceiveMail;
//Publisher.NewsPaper += sub1.ReceiveMail;
//Publisher.NewsPaper += sub2.ReceiveMail;
//publisher.OnMagazin();
//publisher.OnNewsPaper();
publishers[1].PrintMagazin("Донбасс");
}
}
}