Делегаты и события - C# (186606)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток уважаемые, очень туго идет освоение delegate and event, создал небольшую программку, с таким заданием: (Разработал класс (NewsOperator), который предоставляет услуги рассылки информации по категориям (News, Sports,Weather). Создал класс (Subscriber(подписчик)), который подписывается на определенную категорию и при выходе новой новости в категории, подписчик получает услугу. Так вот что-то мне подсказывает что коду, далеко до Нормального вида, подскажите мне где что исправиться, может быть по другому организовать "По правилам хорошего тона". Повторюсь, тема дается очень трудно, хотелось бы ее довести до хорошего понимания. Ниже приведу разработанный мною код, и

спасибо за уделенное время!

class NewsOperator
 delegate void MyEveentHandler();
    class NewsOperator
    {
        public event MyEveentHandler NewsNews;
        public event MyEveentHandler NewsSports;
        public event MyEveentHandler NewsWeather;
        public void News()
        {
            if (NewsNews != null)
                NewsNews();
            Console.WriteLine("This is news");
        }
        public void Sports()
        {
            if (NewsSports != null)
                NewsSports();
            Console.WriteLine("This is news sports");
        }
        public void Weather()
        {
            if (NewsWeather != null)
                NewsWeather();
            Console.WriteLine("This is news weather ");
        }
        public void EventNews()
        {
            News();
            Sports();
            Weather();
        }
    }
class Subscriber
  class Subscriber
    {
        private string _name;
        public Subscriber(string name)
        {
            _name = name;
        }
        public void Subscribe()
        {
            Console.Write("{0},  ", _name);
        }
    }
static void Main()
 static void Main(string[] args)
        {
            NewsOperator newsOperator = new NewsOperator();
 
            Subscriber alex = new Subscriber("Alex");
            newsOperator.NewsNews += alex.Subscribe;
            newsOperator.NewsSports += alex.Subscribe;
            Subscriber vika = new Subscriber("Vika");
            newsOperator.NewsWeather += vika.Subscribe;
            Subscriber serhei = new Subscriber("Serhei");
            newsOperator.NewsNews += serhei.Subscribe;
            newsOperator.NewsSports += serhei.Subscribe;
            newsOperator.NewsWeather += serhei.Subscribe;
 
            newsOperator.EventNews();
 
            Console.ReadLine();
        }

Решение задачи: «Делегаты и события»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication5 {
    delegate void CommonDelegate(NewsType newsType);
    class Program {
        static void Main(string[] args) {
            Publisher publisher=new Publisher();
 
            Subscriber sub1=new Subscriber();
            Subscriber sub2=new Subscriber();
            Subscriber sub3=new Subscriber();
 
            publisher.Subscribe(sub1, NewsType.News);
            publisher.Subscribe(sub2,NewsType.News);
            publisher.Subscribe(sub3, NewsType.Weather);
 
            Publisher.FireEvents(NewsType.News);
            Publisher.FireEvents(NewsType.Weather);
            Console.WriteLine();
 
            publisher.Unsubscribe(sub1, NewsType.News);
 
            Publisher.FireEvents(NewsType.News);
            Publisher.FireEvents(NewsType.Weather);
 
            Console.ReadLine();
        }
    }
    public class Publisher {
        static Dictionary<NewsType, List<Subscriber>> subscribers = new Dictionary<NewsType, List<Subscriber>>();
 
        static Publisher() {
            subscribers.Add(NewsType.News, new List<Subscriber>());
            subscribers.Add(NewsType.Sports, new List<Subscriber>());
            subscribers.Add(NewsType.Weather, new List<Subscriber>());
        }
 
        public void Subscribe(Subscriber subscriber, NewsType type) {
            if (!subscribers[type].Contains(subscriber)) {
                subscribers[type].Add(subscriber);
            }
        }
        public void Unsubscribe(Subscriber subscriber, NewsType type) {
            if (subscribers[type].Contains(subscriber)) {
                subscribers[type].Remove(subscriber);
            }
        }
        public static void FireEvents(NewsType newsType) {
           
            var allWhoSubscribe = subscribers[newsType];
            foreach (var s in allWhoSubscribe) {
                s.OnCallback(newsType);
            }
        }
    }
    public class Subscriber {
        public string Name { get; private set; }
        public Subscriber() {
            Name = Guid.NewGuid().ToString();
        }
        public void OnCallback(NewsType type) {
            Console.WriteLine("News type: {0}", type.ToString());
        }
        public override bool Equals(object obj) {
            return this.ToString().Equals(obj.ToString());
        }
        public override int GetHashCode() {
            return this.Name.GetHashCode();
        }
        public override string ToString() {
            return Name;
        }
    }
    
    public enum NewsType {
        News,
        Sports,
        Weather
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5