仅通知某些观察者c#

时间:2013-05-07 23:02:53

标签: c# oop observer-pattern

我有一个类层次结构:

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类具有单个观察者界面。当因素发生变化时,通知者必须通知:仅限员工; 学生仅在问题编号发生变化时;这是我的代码:

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

如何使通知员仅通知员工或仅通知学生? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要单独订阅/通知更改的不同内容。然后工作人员订阅因子事件,学生订阅问题事件。

这也意味着你不需要施放。

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

我认为你这样做是为了练习,因为C#事件确实是在正常的.NET编码中实现这一点的方法。