只通知某些观察者c#

本文关键字:观察者 通知 | 更新日期: 2023-09-27 18:12:37

我有一个像这样的类层次结构:

public class Staff : Person
{
    public Staff() {}
    public Staff(string id): base(id) {}
    public override void Update(object o) { Console.WriteLine(id + "    notified that Factor is {1} .", id, o.ToString()); }
}
public class Student : Person
{
    public Student() {}
    public Student(string id): base(id) {}
    public override void Update(object o) { Console.WriteLine(id +"  notified that Question is {1} .", id, o.ToString()); }
}

public abstract class Person : IPerson
{
    protected string id;
    public Person() { }
    public Person(string i) { this.id = i; }
    public abstract void Update(Object o);    // { Console.WriteLine(id +" notified about {1} .", id, o.ToString()); }
}

代码在启动时创建Student_1, Student_2和Staff_1。Person类有一个观察者接口。当因子发生变化时,notififier必须通知:Staff only;学生仅当题号发生变化时;这里有一个代码:

public void Notify()
    {
        foreach (IPerson o in observers)
        {
            if (o is Student) { o.Update(QuestionNumber); }
             else if (o is Staff) { o.Update(Factor); }
        }
    }

但问题是,无论改变了什么(问题编号或因素),整个群体都会得到通知,就像这样:

  • Student_1通知问题编号为1
  • Student_2通知问题编号为1
  • Staff_1通知因子为current_factor

如何使通知只通知教职员或只通知学生?提前感谢!

只通知某些观察者c#

您需要为不同的更改单独订阅/通知。然后教职工订阅Factor事件,学生订阅question事件。

这也意味着你不需要强制转换。

你的IPerson可以有一个UpdateQuestion和一个UpdateFactor方法。

我认为你这样做是一个练习,因为c#事件确实是在正常的。net编码中做到这一点的方式。